Python3中闭包介绍
Python3中的闭包(closure)是一个函数对象,它记住封闭作用域(enclosing function)中的值,即使它们不存在于内存中。它是一个将函数与环境一起存储的记录。由于闭包用作回调函数,因此它们提供了某种数据隐藏,这有助于我们减少使用全局变量。
Python3中的嵌套函数(nested function):在另一个函数中定义一个函数,内部函数(inner function)能够访问封闭范围内(外部函数, outer function)的变量。
Python3中的闭包必须满足三个条件:
(1). 必须有一个嵌套函数。
(2). 这个嵌套函数必须引用一个非本地(nonlocal)变量(一个在它封闭的范围内的变量)。
(3). 封闭作用域必须返回内部函数。
以上内容主要参考:
1. https://www.geeksforgeeks.org/python-closures/
2. https://data-flair.training/blogs/python-closure/
以下为测试代码:
var = 3if var == 1:# reference: https://www.geeksforgeeks.org/python-closures/def outerFunction(text):text = textdef innerFunction():print(text)# Note we are returning function WITHOUT parenthesis(括号)return innerFunctionmyFunction = outerFunction('Hey!')myFunction()
elif var == 2:# reference: https://www.geeksforgeeks.org/python-closures/def logger(func):def log_func(*args):print(func(*args))# Necessary for closure to work(returning WITHOUT parenthesis)return log_funcdef add(x, y):return x+yadd_logger = logger(add)add_logger(3, 3)
elif var == 3:# reference: https://data-flair.training/blogs/python-closure/def outer(x):result=0def inner(n):nonlocal resultwhile n>0:result+=x*nn-=1return result # 7*3 + 7*2 + 7 = 42return innermyfunc=outer(7)print(myfunc(3)) # 42print("test finish")
GitHub: https://github.com/fengbingchun/Python_Test
Python3中闭包介绍相关推荐
- Python3中生成器介绍
生成器(generator):一个返回生成器迭代器的函数.它看起来像一个普通函数,除了它包含用于生成一系列可在for循环中使用的值的yield表达式或者可以使用next函数一次检索一个值. 在Pyth ...
- Python3中迭代器介绍
Python中一个可迭代对象(iterable object)是一个实现了__iter__方法的对象,它应该返回一个迭代器对象(iterator object).迭代器是一个实现__next__方法的 ...
- Python3中异常处理和try/except,try/finally的用法
1:Python3中异常处理介绍 在Python中当发生错误时,Python中的异常会自动触发,异常也能由代码触发和拦截,Python中有如下语句来触发,处理异常: a:try/except:拦截由P ...
- Python3中collections.OrderedDict介绍
Python3中的collections模块实现了特定目标的容器,以提供Python标准内建容器dict.list.set和tuple的替代选择,包括namedtuple.deque.ChainMap ...
- Python3中typing模块介绍
typing.py的源码在:https://github.com/python/cpython/blob/main/Lib/typing.py.此模块为类型提示(Type Hints)提供运行时支持( ...
- Python3中内置函数callable介绍
Python3中的内置函数callable接受一个对象参数,如果此对象参数看起来可调用,则callable函数返回True,否则返回False.如果返回True,则调用仍有可能失败:但如果 ...
- Python3中lambda表达式介绍
Python3中的lambda表达式或lambda函数是匿名函数(anonymous function),意味着该函数没有名称.def关键字用于在Python3中创建一个普通函数,类似地,lambda ...
- Python3中pass语句介绍
python3中的pass语句是一个空语句,什么都不做,执行它时什么也没有发生,是一个空操作. pass语句通常用作占位符(place-holder),即当用户不知道要编写什么代码时,用户只需在那行上 ...
- Python3中装饰器@typing.overload的使用
typing.py的源码在:https://github.com/python/cpython/blob/main/Lib/typing.py .此模块为类型提示(Type Hints)提供运行时支持 ...
最新文章
- pandas.DataFrame.to_dict()的使用详解
- 商业大佬提醒:如果不采取措施,美国在人工智能领域将落后于中国
- jupyter中python3如何导入文件_Python·Jupyter Notebook各种使用方法
- java 隐藏了什么_JAVA程序中封装与隐藏是什么意思
- 方舟服务器制作修改,ARK方舟:生存进化服务器禁止物品制造的修改方法
- WCF从理论到实践(10):异常处理 (转)
- OPNET网络仿真分析-1.5、OPNET中英文对比
- 简单的sql循环操作
- ES5 对象的扩展(Object.preventExtensions)、密封(Object.seal)和冻结(Object.freeze)
- C# 常用路径获取方式
- 中国地图着色问题c语言,中国地图四色染色问题.doc
- jquery.uploadify php,jquery组件Uploadify的使用
- 进行桌面共享软件开发的市场前景如何
- 零基础CSS入门教程(17)–表格样式
- CRA与craco配置移动端
- USACO 4.2 The Perfect Stall 完美的牛栏(最大匹配)
- 为什么苹果蓝牙耳机连上还是公放_如何测试蓝牙设备的延时
- 乐高中的第一个C语言编程,Robotc for EV3 配置及第一个小实例
- 微信小程序获取openid的两种方式
- GitHub Copilot 被爆存在安全漏洞,涉及四成代码
热门文章
- 力扣(LeetCode)刷题,简单+中等题(第26期)
- 如何高效便捷的画出炫酷神经网络图
- 4 行 Python 代码获取所在城市天气预报
- CS131专题-3:图像梯度、边缘检测(sobel、canny等)
- 设备初始化缩水篇(一)
- Monitor CodeForces - 846D ——二维前缀和
- 机器学习(11)线性回归(1)理论:损失函数(含最小二乘法)、正规方程、梯度下降、回归性能评估(均方差)
- php读取西门子plc_基于Socket访问西门子PLC系列教程(二)
- 估计点云中的曲面法线
- PCL点云变换与移除NaN