国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Python > 正文

python構(gòu)建自定義回調(diào)函數(shù)詳解

2020-01-04 16:52:06
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

回調(diào)函數(shù)用起來(lái)比較爽。特別是在js中,滿(mǎn)世界全是回調(diào),那么在python/272742.html">python/265853.html">python中,怎么來(lái)優(yōu)雅地實(shí)現(xiàn)自己的回調(diào)函數(shù)呢

下面貼一個(gè)我寫(xiě)的例子

class BaseHandler(object):  def crawl(self, url, **kwargs):    if kwargs.get('callback'):      callback = kwargs['callback']      if isinstance(callback, basestring) and hasattr(self, callback):        func = getattr(self, callback)      elif hasattr(callback, 'im_self') and callback.im_self is self:        func = callback    resp = requests.get(url)    return func(resp)class Anjuke(BaseHandler):  def on_start(self):    self.crawl(start_url, callback=self.index_url)  def index_url(self, response):    print response.texta = Anjuke()print a.on_start()

其實(shí)就是通過(guò)kwargs獲取到callback的對(duì)象/字符串,然后通過(guò)getattr(self, callback)來(lái)反射得到回調(diào)的方法,然后調(diào)用即可。

接著可以進(jìn)一步抽象,增加回調(diào)方法的復(fù)用,于是BaseHandler可以改寫(xiě)成裝飾器方式

def callback(f):  def wrapper(obj, *args, **kwargs):    resp = f(obj, *args, **kwargs)    if kwargs.get('callback'):      mcallback = kwargs['callback']      if isinstance(callback, basestring) and hasattr(obj, mcallback):        func = getattr(obj, mcallback)      elif hasattr(mcallback, 'im_self') and mcallback.im_self is obj:        func = mcallback        kwargs['callback'] = func.__name__      else:        raise NotImplementedError("self.%s() not implemented!" % callback)    return func(resp)  return wrapperclass BaseHandler(object):  @callback  def crawl(self, url, **kwargs):    url = quote_chinese(_build_url(url.strip(), kwargs.get('params')))    return requests.get(url)

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 阿拉善盟| 龙里县| 满洲里市| 安义县| 大新县| 新宁县| 肥乡县| 万安县| 沽源县| 浦城县| 玉林市| 水城县| 湖北省| 富阳市| 双鸭山市| 永靖县| 荆门市| 南靖县| 竹北市| 汉寿县| 错那县| 普兰店市| 南皮县| 阳江市| 额济纳旗| 滕州市| 加查县| 怀来县| 军事| 永康市| 章丘市| 拉萨市| 文成县| 建昌县| 屯门区| 文昌市| 桃园市| 将乐县| 三穗县| 万荣县| 太和县|