python中函数闭包

闭包:一个函数嵌套另一个函数,外面的函数简称为外函数,里面的为内函数,外函数返回内函数。与普通函数不同的是,普通函数调用完后,函数中的局部变量消失,返回内存,而闭包外函数调用后,外函数的局部变量没有消失,而是继续留给内函数使用。
1,普通函数

def fn():
	a = 2
	return a
fn()
print(a)
#输出报错name 'a' is not defined

因为a是局部变量,函数调用后消失

2,闭包(函数嵌套,且返回为函数)

def fn():
	a = 1
	def f1():
		return a
	return f1 # 返回f1函数而不是调用
b = fn() # b即为f1,b总可以访问fn()中的变量
print(b())# 调用f1函数
# 输出为1

3,闭包的作用

def fn():
	a = [1]
	def f1(x):
		a.append(x)
		return a
	return f1
b = fn()
print(b(2))
a = []
print(b(3))
# 输出为[1, 2],[1, 2, 3]

可见a = []并不影响,闭包的作用是创建一些当前函数才可访问的变量,可以将私有数据隐藏到函数中,只能通过当前函数访问

4,闭包中实例化的对象

def fn():
	a = []
	def f1(x):
		a.append(x)
		return a
	return f1
b = fn()
c = fn()
d = fn()
print(id(b),id(c))#可见b,c为2个不同对象
print(c(5),c(6))#c为同一对象
print(b(5),d(6))# b,d为不同对象
# 输出为2175909442968 2176160163768
#[5, 6] [5, 6] [5] [6]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值