闭包函数
内部函数包含对外部作用域而非全剧作用域名字的引用, 该内部函数称为闭包函数
函数内部定义的函数称为内部函数
由于有了作用域的关系, 我们就不能拿到函数内部的变量和函数了. 如果我们就是想拿怎么办呢? 返回呀! 我们都知道函数内的变量我们要想在函数外部用, 可以直接返回这个变量, 那么如果我们想在函数外部调用函数内部的函数呢? 是不是直接就把这个函数的名字返回就好了? 这才是闭包函数最常用的用法
- def func():
- name = 'eva'
- def inner():
- print(name)
- return inner
- f = func()
- f()
判断闭包函数的方法 closure
- # 输出的__closure__有 cell 元素 : 是闭包函数
- def func():
- name = 'eva'
- def inner():
- print(name)
- print(inner.__closure__)
- return inner
- f = func()
- f()
- # 输出的__closure__为 None : 不是闭包函数
- name = 'egon'
- def func2():
- def inner():
- print(name)
- print(inner.__closure__)
- return inner
- f2 = func2()
- f2()
闭包嵌套
- def wrapper():
- money = 1000
- def func():
- name = 'eva'
- def inner():
- print(name,money)
- return inner
- return func
- f = wrapper()
- i = f()
- i()
闭包函数获取网络应用
- from urllib.request import urlopen
- def index():
- url = "http://www.xiaohua100.cn/index.html"
- def get():
- return urlopen(url).read()
- return get
- xiaohua = index()
- content = xiaohua()
- print(content)
来源: http://www.bubuko.com/infodetail-3377226.html