
回调函数使用起来更舒适. 特别是在js中,整个世界充满了回调,因此在python中python 回调函数,如何优雅地实现自己的回调函数
这是我写的一个例子
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.text
a = Anjuke()
print a.on_start()
实际上,回调的对象/字符串是通过kwargs获得的,然后通过getattr(自身,回调)来反映获取回调的方法,然后调用.
然后可以对其进行抽象,以增加回调方法的重用性,因此可以将BaseHandler重写为装饰器方法
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 wrapper
class BaseHandler(object):
@callback
def crawl(self, url, **kwargs):
url = quote_chinese(_build_url(url.strip(), kwargs.get('params')))
return requests.get(url)
Python自定义pi函数代码
以下内容与Python的自定义pi函数有关. def pi(): #计算Pi的位数. #由于LGLT Meertens而产生的算法. k,a,b ...

一种的移动滚动选择器,支持单选到多选,支持多级级联,提供自定义的回调功能,提供更新功能的辅助渲染,重新定位功能以及兼容的PC端拖放Wait. .
mobileSelect.js的移动滚动...
python自定义排序功能
自定义排序函数Python的内置sort()函数可以对列表进行排序: >>> sorted([36,5,12,9,21])[5,9,12,21,36]但是. ..
了解Python中的回调函数
关于回调函数,Internet上有很多指令和各种说明,其中大多数试图用语言来描述. 我认为,如果各个角色之间的关系不清楚,如果没有相关的编程要求,那么该语言就很薄弱,很难理解. 这是360百科全书的解释: 在计算机编程中...
Python回调函数
在计算机编程中,回调函数或简称回调(Callback)是指对一段通过功能参数传递给其他代码的可执行代码的引用. 这种设计允许基础代码调用高级定义子例程. 回调函数有两种类型: bloc ...

JS自定义回调函数回调
1应用场景: js的异步加载. 异步加载get,post和ajax时,可能无法完成相应的请求,这时您需要使用请求返回的数据作为参数来调用其他函数,然后需要使用回调函数. 2回调函数功能: 等待函数调用...
Js自定义回调函数
参考<! doctype html> python回调函数 回调函数是通过函数指针调用的函数. 如果将函数指针(地址)作为参数传递给另一个函数,则当此指针用于调用它所指向的函数时,我们说这是回调函数. 一些库函数是... &lpar; 18&rpar; python 3回调函数 回调函数: 将函数指针(地址)作为参数传递给另一个函数. 当使用此指针调用它所指向的函数时,我们说这是一个回调函数. 回调函数不属于该函数的实现者直接调用,而是在发生特定事件或条件时由另一方调用... 【zepto学习笔记01】核心方法和币种; &lpar; &rpar; 前言我们的移动终端基本上使用zepto,并且我已经从有点白变成了更加可靠的前端. 最近,我经常不得不更改为zepto源代码. 但是,我对zepto不太熟悉. 实际上,前端级别还不够,所以要私下秘密学习,不要被发现... NET Core HTTP管道 ASP.NET Core HTTP管道的序言将在2016年通过,而且时间确实很快. 上次编写了Identity系列之后python 回调函数,响应还不错,所以我最初打算编写一个ASP.NET Cor ... Delphi美化界面重印 手头的项目几乎完成并移交给客户. 结论是接口太丑,至少不能使接口类似于QQ. (目前,QQ2009界面的确还是不错的,我也非常喜欢它). 1.透明度问题. 重新调整用于...的界面确实很麻烦. makeObjectsPerformSelector和冒号的用法;方法 //让数组中的每个元素都调用@selector中的get方法[self.buttons makeObjectsPerformSelector: @selector(get)]; NSString ... wpf将渐变添加到列表框 jQuery Mobile Slider禁用点击事件 Azi原稿,请注明转载来源. 使用jQuery Mobile Slider时,在页面上上下拖动时很容易意外触发Slider的click事件,从而导致误操作. 因此,必须禁用Slider的点击事件. 官方A ... Weblogic 12c群集部署和会话复制 本文在以前的Weblogic12c群集构建的基础上,介绍了Weblogic12c群集应用程序的部署和会话复制. 1.启动服务. 首先在weblogic12c控制台中启动托管服务server1.s ... vue学习笔记-ES6 //第一部分/ * console.log(a +'c'); var a = 1; console.log(b +'c');令b = 1; * / //上面的代码左定义会导致错误: / * v ... Java集合可比和比较器排序方法概述 一个. 概述Comparable和Comparator用于实现集合中元素的比较. 排序. Comparable是在java.lang下的集合内实现的排序方法. 比较器不在集合中... < XML学习(1) XML中的实体引用,某些字符具有特殊含义. 如果将字符“ <”放在XML元素中,则会发生错误,因为解析器会将其视为新元素的开头. 这将生成XML错误: ...

本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-176651-1.html
我很想说其实三哥也是大国
厂家也是下血本了