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-11-14获取参数学习:Python编程入门教程
- 2024-11-14Python编程基础入门
- 2024-11-14Python编程入门指南
- 2024-11-13Python基础教程
- 2024-11-12Python编程基础指南
- 2024-11-12Python基础编程教程
- 2024-11-08Python编程基础与实践示例
- 2024-11-07Python编程基础指南
- 2024-11-06Python编程基础入门指南
- 2024-11-06怎么使用python 计算两个GPS的距离功能-icode9专业技术文章分享