python闭包的条件_python闭包
python闭包
闭包的条件
1.闭包函数必须返回一个函数对象
2.闭包函数内部的函数必须引用外部的函数的变量,(一般不能引用全局的变量),里面函数的返回值可有可无
闭包格式
def 外层函数(参数):
def 内层函数():
print("内层函数执行", 参数)
return 内层函数
内层函数的引用 = 外层函数("传入参数")
内层函数的引用()
__closure__查看闭包引用的外部函数作用域的值
首先是一个元组
def zx():
a=1
b=2
def inner(z):
print(a+b+z)
return inner
wl = zx()
print(wl.__closure__.__class__)
print(wl.__closure__)
for i in wl.__closure__:
print(i.cell_contents)
(, )
1
2
Process finished with exit code 0
注意
1.内部函数如果不引用外部函数的值,那么__closure__一直为None
2.如果主函数没有返回子函数,那么没有__closure__属性
闭包的意义
1.返回的函数对象,不仅仅是一个函数对象,这个对象外部还包裹着一层作用域,可以在这层作用域中放入想要的参数,这样就可以使函数对象无论什么时候优先使用这层作用域中的值,有屏蔽全局作用域的作用
2.外部无法访问嵌套函数内部的变量,只能靠函数返回的对象,在能访问这些变量
闭包案例
从例子中可以看出,函数无法保存for产生的临时变量,最后都指向最后一个,如果有需求要保存临时变量怎么解决呢?这个时候就需要用到闭包了
lis = []
for i in range(3):
def zx(a):
return a+i
lis.append(zx)
for f in lis:
print(f(2))
4
4
4
使用闭包,就可以保存for产生的临时变量,保存到函数的局部作用域中
lis = []
for i in range(3):
def zx(i):
def inner(a):
return a+i
return inner
lis.append(zx(i))
for f in lis:
print(f(2))
2
3
4
闭包的应用
1.装饰器
def login_auth(func):
def inner(*args,**kwargs):
#业务逻辑
res = func(*args,**kwargs)
return res
return inner
2.爬虫
import requests
def outter(url):
def get():
response = requests.get(url)
print(f"done: {url}")
return get
baidu=outter('https://www.baidu.com')
python = outter('https://www.python.org')
baidu()
3.闭包可以保存运行环境
def zx(a):
def inner():
print(a)
return inner
wl = zx(10)
a=100
wl()
10
闭包的实际案例
def who(name):
def do(what):
print(name,'说:',what)
return do
zx = who('zx')
wl = who('wl')
zx('吃饭去啊')
wl('好啊')
zx 说: 吃饭去啊
wl 说: 好啊
参考链接
python闭包的条件_python闭包相关推荐
- python闭包怎么理解_Python 闭包的理解
Last Updated on 2019年10月15日 Python中的闭包是一个比较模糊的概念,不太好理解,我最近的面试中也被问及,在一个单例模式的实现上,我用装饰器实现单例,然后面试官就问到了我对 ...
- python闭包实现原理_Python 闭包详解
在函数编程中经常用到闭包.闭包是什么,它是怎么产生的及用来解决什么问题呢.给出字面的定义先:闭包是由函数及其相关的引用环境组合而成的实体(即:闭包=函数+引用环境)(想想Erlang的外层函数传入一个 ...
- python什么是闭包的作用域_Python闭包的作用域理解
什么是闭包 在维基中,闭包的解释是这样的: 在计算机科学中,闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数.这个被引用的自由变量将和这个函数一同存在, ...
- python闭包修改全局变量_Python 闭包 自由变量
理解:封闭的东西:保证数据的安全 #平均收盘价 方案一数据是不安全的 l1 = [] def make_average(new_value): l1.append(new_value) total = ...
- python重新执行条件_Python 基础(二)
封面图片来源:沙沙野 内容概览Python 中的 type() 函数 Python 中的条件判断语句一: if Python 中的条件判断语句二:while Python 中的 type() 函数ty ...
- python闭包修改全局变量_python闭包探究一二
复习 python引用变量的顺序: 当前作用域局部变量 -> 外层作用域变量 -> 当前模块中的全局变量 -> python内置变量 global:声明一个全局变量 nonlocal ...
- python闭包怎么理解_Python:闭包的理解
很多函数型的语言都有闭包这一概念,比如python的兄弟js. 人们刚听到闭包这一概念总会觉得它很晦涩,难以理解.其实不然,主要是他的名字起得太抽象了,让人误以为很难. 下面举一个例子: #codin ...
- python中闭包的作用_Python闭包及其作用域
Python闭包及其作用域 关于Python作用域的知识在python作用域有相应的笔记,这个笔记是关于Python闭包及其作用域的详细的笔记 如果在一个内部函数里,对一个外部作用域(但不是全局作用域 ...
- python闭包修改全局变量_Python 闭包
外函数和内函数 如果在一个函数的内部定义了另一个函数,外部的我们叫他外函数,内部的我们叫他内函数. 闭包: 在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的 ...
最新文章
- oracle每一行的hash值,Hash分区表分区数与数据分布的测试
- boost::log::sinks用法的测试程序
- OutLook最小化到托盘
- 通信工程施工设计纲领文件
- 本地执行php查看内存占用,查看页面执行php占用内存情况
- http中指定使用worker/prefork
- 【操作系统】进程调度的不同层次
- 蚂蚁员工人均都能买一套杭州的房子了?!加油啊,打工人!
- 通过PEB遍历进程模块(x64/wow4)
- 微博爬虫 ----- 微博发布时间清洗
- CUDA+cuDNN下载安装(配备GPU环境)
- 杭州电子科技大学acm--2020
- 【Ubuntu】QT程序 could not find or load the Qt platform plugin “xcb“ in “报错解决
- Git 版本回退方法
- 常见的计算机网络安全威胁的表现形式,网络安全威胁的的表现形式有哪些?
- 18100出多少取整_电子表格里小数取整用什么公式?
- java poi导出PPT格式
- 什么是蛋白质结构域?什么是HTH?
- 利用python从网络上爬取图片_一篇文章教会你利用Python网络爬虫抓取王者荣耀图片...
- 数据与计算机通信实验报告,完整版通信工程专业综合实验报告