闭包

 阅读目录:

 

概念:

闭包就是内部函数使用了外部函数的变量

 

判断是不是一个闭包:

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())

应用:

  • 缓存:访问网页,同一时刻同时去访问同一网站
  • 装饰器
posted @ 2019-02-02 02:42  小萍瓶盖儿  阅读(94)  评论(0)    收藏  举报