Python3中闭包介绍
生活随笔
收集整理的这篇文章主要介绍了
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中global/nonlo
- 下一篇: Python3中__init__.py文