十二、Python——闭包

文章详细介绍了Python中的闭包概念,包括闭包的定义、格式、应用场景和缺点。通过示例展示了闭包如何保存外部函数的状态,如创建计数器,以及其在延长作用域和访问内部元素方面的作用。同时,提到了闭包可能导致的作用域不直观和内存占用问题。
摘要由CSDN通过智能技术生成

1.闭包

(1)条件:

  • 外部函数中定义了一个内部函数
  • 外部函数有返回值
  • 返回的值是内部函数名
  • 内部函数引用了外部函数变量
    (2)格式:
def 外部函数名():
	...
	def 内部函数名():
		...
	return 内部函数名
	
def func():
	a = 100
	def inner_func():
		b = 99
		print(a,b)
	return inner_func

x = func()
print(x)
# x就是内部函数,x()就是调用内部函数
x()    # 100,99
def func(a,b):
	c = 10
	def inner_func():
		s = a + b + c
		print('相加之后的结果是:',s)
	return inner_func

# 调用func
ifunc = func(6,9)

# 调用返出来的内部函数
ifunc()  # 25

2.闭包的应用

(1) 能够保存并返回闭包时的状态(外层函数变量)

# 计数器
def generate_count():
	container = [0]
	def add_one():
		container[0] = container[0] + 1
		print('当前第{}次访问'.format(container[0]))
	return add_one

counter = generate_count()
counter()  # 当前第1次访问
counter()  # 当前第2次访问
counter()  # 当前第3次访问

3.闭包缺点

(1)作用域没有那么直观
(2)变量不会回收,占有一定内存

4.闭包作用

(1)可使用同级的作用域
(2)读取其它元素的内部元素
(3)延长作用域

def func():
	a = 100
	def inner_func1():
		b = 90
		s = a + b
		print(s)

	def inner_func2():
		inner_func1()
		return 'hello'
	return inner_func2

# 调用func
f = func()
f()  # 190,其实调用inner_func2()

ff = f()
print(ff)  # 190  hello

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值