闭包
阅读目录:
概念:
闭包就是内部函数使用了外部函数的变量
判断是不是一个闭包:
inner.__closure__
def outer(): a = 1 b = '123' c = [1, 2, 3] def inner(): print(1234) print(inner.__closure__) # inner不是一个闭包 outer()
执行结果:None
def outer():
a = 1
b = '123'
c = [1,2,3]
def inner():
print(a,b,c)
print(inner.__closure__) # inner是一个闭包
outer()
执行结果:(<cell at 0x00000271A7CD8588: int object at 0x0000000068AE6C20>,
<cell at 0x00000271A7CD85B8: str object at 0x00000271A7D69110>,
<cell at 0x00000271A7CD85E8: list object at 0x00000271A7CA3588>)
闭包爬虫例子:
from urllib import request # 导入别人写好的python代码,urllib是专门负责访问url的 def func(url): ret = request.urlopen(url) # 利用urlopen函数打开一个url得到结果ret content = ret.read().decode('utf-8') #使用ret的read方法得到bytes类型的网页源码,然后转码成str def inner(): return content return inner ret = func('http://www.cnblogs.com/Eva-J/articles/7213953.html') # 相当于将url对应的内容存在了url中,每一次调用ret就是获取内容的过程 for i in range(10): print(ret())
应用:
- 缓存:访问网页,同一时刻同时去访问同一网站
- 装饰器

浙公网安备 33010602011771号