欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 人文社科 > 生活经验 >内容正文

生活经验

Python3中闭包介绍

发布时间:2023/11/27 生活经验 45 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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中闭包介绍的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。