Python 闭包与 nonlocal

闭包

def a(x):
		print(x)
		def b(y):
			print(y)
			return x*y
		return b

像b这样存储其所在作用域的函数称为闭包。
在这里,一个函数位于另一个函数中,且外面的函数返回里面的函数。也就是返回一个函数,而不是调用它。
重要的是,返回的函数能够访问其定义所在的作用域。
在这里插入图片描述

	可以看出n是代表b函数,
	并且我们调用n(也就是调用b函数)时
	n(b函数)可以访问a()里面的参数x,以及局部变量z

id() 函数 Python 内置函数 描述 id() 函数返回对象的唯一标识符
在这里插入图片描述

	在这里,我们想使用b()函数修改a中参数x与局部变量z的值,
	但是发现程序默认新生成两个b()函数的局部变量
				就是说a函数的x,z与b函数的不是一个变量,
				从id可以看出来
	这时就要用到nonlocal关键字了
	这个关键字的用法与global很像,
	让你能够给外部作用域(非全局作用域)内的变量赋值。

在这里插入图片描述
nonlocal的使用要先声明 nonlocal 变量名
之后才能用于赋值等操作

	可以发现,当我们用到nonlocal x
	我们修改的值正是a()函数的值,
	而b函数里z的赋值,并没有影响到a()函数里的z值,
					a(),b()里两个z并不是一个变量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值