[Python]自学笔记8:内嵌函数与闭包

1.global关键字

Python使用了shadowing屏蔽机制,当在函数中试图修改全局变量时,系统会生成一个变量供函数修改,而本身的全局变量不会发生改变。
所以当一定要修改全局变量时,就要用到global关键字了

>>>def myfun():
        global cout
		cout = 10
		print(cout)
>>>myfun()
>>>10
>>>print(cout)
>>>10

2.内嵌(部)函数

Python允许在函数内部创建另一个函数

>>> def fun1():
	print('fun1()正在被调用...')
	def fun2():
		print('fun2()正在被调用...')
	fun2()
	
>>> fun1()
fun1()正在被调用...
fun2()正在被调用...

内部函数的整个作用域都在外部函数之内;
也就是只能在fun1()函数中调用fun2()函数,出了fun1()函数就没有任何对fun2()函数调用的方式了。

3.闭包

如果在一个内部函数中对外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就会被认为是闭包。

闭包就是能够读取其他函数内部变量的函数。例如在javascript中,只有函数内部的子函数才能读取局部变量,所以闭包可以理解成“定义在一个函数内部的函数“。在本质上,闭包是将函数内部和函数外部连接起来的桥梁。 —百度百科

对于内部函数来说,只能对外部函数的变量进行访问,而不能直接修改。

>>>def fun1():
	x = 5
	def fun2():
		x *= x
		return x
	return fun2()
	'''在此函数中,fun2()函数不能对x进行直接修改。'''

因此,可以通过将x修改为列表来解决此问题,因为列表不是存放在栈职中的

>>> def fun1():
	x = [5]
	def fun2():
		x[0] *= x[0]
		return x[0]
	return fun2()

>>> fun1()
25

另外,还可以使用nonlocal关键字进行修改

>>> def fun1():
	x = 5
	def fun2():
		nonlocal x
		x *= x
		return x
	return fun2()

>>> fun1()
25
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值