python 闭包
2022/1/26 11:34:14
本文主要是介绍python 闭包,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1. 什么是闭包?
闭包应该说是一种写法,就是在函数嵌套的基础上,延伸了变量的作用域的写法。说起来可能有点绕,但是实际使用就不饶。
2. 我们考虑一下,为什么要用闭包,闭包到底是为了实现什么功能?
闭包其实是为了让函数本身保存当前的工作状态。就像类一样,类变量可以随着类里函数执行后,被改变:
比如:
class A:
def __init__():
self.cnt = 0
def add(self):
self.cnt = self.cnt+1
a = A()
a.add()
执行之后,我们就发现类变量self.cnt保存了运行的状态,也就是我们cnt+1可以被保存下来,并且不断叠加。
闭包的功能并不是必须的,因为完全可以用别的手段实现闭包。但是闭包的好处就在于,可以将保存状态本身这个工作,也放在函数里。
def func():
cnt = []
def add():
cnt.append(1)
return cnt
return add
然后我们创建一个函数func的对象
a = func() #会返回一个add函数对象
cnt = a() # [1]
cnt = a() # [1,1]
cnt = a() # [1,1,1]
但是cnt必须是可变的!!比如list这种,如果是不可变的,比如int,然后使用a = a+1在重新绑定的时候会出错!必须指明这个变量不是本地变量,而是访问的外部变量,用nonlocal关键字(和global类似)
def outer():
a = 0
def inner():
nonlocal a
a=a+1
return a
return inner
总的来说,如果要保存一个函数操作的历史记录,那么就可以使用闭包的写法,这样可以把一个变量一直存下来,供嵌套函数使用。如果不愿意写闭包,其实用类完全可以实现相同的功能。
我们再考虑另一种情况
a = 1 def func(): a = a+1 return a 这种也执行不会成功,因为a同样被认为是local变量,如何解决呢?与闭包类似,我们使用global(而不是nonlocal)来生命这个变量是全局变量
a = 1 def func(): global a a = a+1 return a 这种情况其实和闭包是很类似的,都是变量作用域的延伸。
这篇关于python 闭包的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-27使用python 将ETH账户的资产打散
- 2024-09-26Python编程基础
- 2024-09-2610 种方法写出更好的 Python 代码
- 2024-09-25Python编程基础详解
- 2024-09-25Python编程入门教程
- 2024-09-25从零开始使用Python构建LLaMA 3
- 2024-09-23Python中理解和使用树形结构的简单教程
- 2024-09-23Python 编程基础入门
- 2024-09-18初探Python股票自动化交易:入门指南
- 2024-09-18Python量化入门:轻松掌握量化分析基础与实战