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中闭包介绍相关推荐

  1. Python3中生成器介绍

    生成器(generator):一个返回生成器迭代器的函数.它看起来像一个普通函数,除了它包含用于生成一系列可在for循环中使用的值的yield表达式或者可以使用next函数一次检索一个值. 在Pyth ...

  2. Python3中迭代器介绍

    Python中一个可迭代对象(iterable object)是一个实现了__iter__方法的对象,它应该返回一个迭代器对象(iterator object).迭代器是一个实现__next__方法的 ...

  3. Python3中异常处理和try/except,try/finally的用法

    1:Python3中异常处理介绍 在Python中当发生错误时,Python中的异常会自动触发,异常也能由代码触发和拦截,Python中有如下语句来触发,处理异常: a:try/except:拦截由P ...

  4. Python3中collections.OrderedDict介绍

    Python3中的collections模块实现了特定目标的容器,以提供Python标准内建容器dict.list.set和tuple的替代选择,包括namedtuple.deque.ChainMap ...

  5. Python3中typing模块介绍

    typing.py的源码在:https://github.com/python/cpython/blob/main/Lib/typing.py.此模块为类型提示(Type Hints)提供运行时支持( ...

  6. Python3中内置函数callable介绍

          Python3中的内置函数callable接受一个对象参数,如果此对象参数看起来可调用,则callable函数返回True,否则返回False.如果返回True,则调用仍有可能失败:但如果 ...

  7. Python3中lambda表达式介绍

    Python3中的lambda表达式或lambda函数是匿名函数(anonymous function),意味着该函数没有名称.def关键字用于在Python3中创建一个普通函数,类似地,lambda ...

  8. Python3中pass语句介绍

    python3中的pass语句是一个空语句,什么都不做,执行它时什么也没有发生,是一个空操作. pass语句通常用作占位符(place-holder),即当用户不知道要编写什么代码时,用户只需在那行上 ...

  9. Python3中装饰器@typing.overload的使用

    typing.py的源码在:https://github.com/python/cpython/blob/main/Lib/typing.py .此模块为类型提示(Type Hints)提供运行时支持 ...

最新文章

  1. pandas.DataFrame.to_dict()的使用详解
  2. 商业大佬提醒:如果不采取措施,美国在人工智能领域将落后于中国
  3. jupyter中python3如何导入文件_Python·Jupyter Notebook各种使用方法
  4. java 隐藏了什么_JAVA程序中封装与隐藏是什么意思
  5. 方舟服务器制作修改,ARK方舟:生存进化服务器禁止物品制造的修改方法
  6. WCF从理论到实践(10):异常处理 (转)
  7. OPNET网络仿真分析-1.5、OPNET中英文对比
  8. 简单的sql循环操作
  9. ES5 对象的扩展(Object.preventExtensions)、密封(Object.seal)和冻结(Object.freeze)
  10. C# 常用路径获取方式
  11. 中国地图着色问题c语言,中国地图四色染色问题.doc
  12. jquery.uploadify php,jquery组件Uploadify的使用
  13. 进行桌面共享软件开发的市场前景如何
  14. 零基础CSS入门教程(17)–表格样式
  15. CRA与craco配置移动端
  16. USACO 4.2 The Perfect Stall 完美的牛栏(最大匹配)
  17. 为什么苹果蓝牙耳机连上还是公放_如何测试蓝牙设备的延时
  18. 乐高中的第一个C语言编程,Robotc for EV3 配置及第一个小实例
  19. 微信小程序获取openid的两种方式
  20. GitHub Copilot 被爆存在安全漏洞,涉及四成代码

热门文章

  1. 力扣(LeetCode)刷题,简单+中等题(第26期)
  2. 如何高效便捷的画出炫酷神经网络图
  3. 4 行 Python 代码获取所在城市天气预报
  4. CS131专题-3:图像梯度、边缘检测(sobel、canny等)
  5. 设备初始化缩水篇(一)
  6. Monitor CodeForces - 846D ——二维前缀和
  7. 机器学习(11)线性回归(1)理论:损失函数(含最小二乘法)、正规方程、梯度下降、回归性能评估(均方差)
  8. php读取西门子plc_基于Socket访问西门子PLC系列教程(二)
  9. 估计点云中的曲面法线
  10. PCL点云变换与移除NaN