Python中的内部函数和闭包

Python中的内部函数和闭包,第1张

概述Python支持函数内嵌>>>deffun1(): print('fun1()正在被调用...') deffun2(): print('fun2()正在被调用...') fun2() >>>fun1()fun1()正在被调用...fun2()正在被调用...>>>fun2()Traceback(mostrecentcalllast):File"<

Python支持函数内嵌

>>> def fun1():	print('fun1()正在被调用...')	def fun2():		print('fun2()正在被调用...')	fun2()	>>> fun1()fun1()正在被调用...fun2()正在被调用...
>>> fun2()Traceback (most recent call last):  file "<pyshell#22>", line 1, in <module>    fun2()nameError: name 'fun2' is not defined

我们可以看到,fun2()智能通过fun1()来进行调用,而不能直接调用fun2()


闭包

>>> def FunX(x):	def FunY(y):		return x * y	return FunY>>> i = FunX(8)>>> i<function FunX.<locals>.FunY at 0x000001A770A2D8C8>>>> type(i)<class 'function'>>>> i(5)40>>> FunX(8)(5)40

或者直接用FunX(8)(5)把x赋值为8,把y赋值为5

>>> def Fun1():	x = 5	def Fun2():		x *=x		return x	return Fun2()>>> Fun1()Traceback (most recent call last):  file "<pyshell#45>", line 1, in <module>    Fun1()  file "<pyshell#44>", line 6, in Fun1    return Fun2()  file "<pyshell#44>", line 4, in Fun2    x *=xUnboundLocalError: local variable 'x' referenced before assignment

内部函数Fun2()中,想利用Fun1()中的x的值,最后发现系统报错,因为Fun2()中的x对于Fun1()来说是局部变量。

那么怎么解决这个问题呢?

>>> def Fun1():	x = [5]	def Fun2():		x[0] *= x[0]		return x[0]	return Fun2()>>> Fun1()25

这是因为列表不是存储在栈中的。

那么还可以怎么解决呢?

>>> def Fun1():	x = 5	def Fun2():		nonlocal x		x *=x		return x	return Fun2()>>> Fun1()25

我们可以看到,可以用nonlocal x 来规定x不是局部变量,那么也可以实现上面的要求

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

总结

以上是内存溢出为你收集整理的Python中的内部函数和闭包全部内容,希望文章能够帮你解决Python中的内部函数和闭包所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1188513.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存