Python学习笔记-函数闭包

1.什么是闭包

1.内部函数对外部函数作用域变量的引用(非全局变量),则称内部函数为闭包。即闭包就是能够读取其他函数内部变量的函数。
2.一个闭包就是你调用了外部函数,外部函数返回内部函数,此时的内部函数就叫做闭包函数。

2.闭包的简单例子

# 普通函数写法
def func():
	a=1
	b=2
	return a+b

# 闭包写法
def sum(a):
	def add(b):
	# 内部函数称之为闭包函数
		return a+b
		# 内部函数引用外部函数作用域变量a
	return add
	# 外部函数返回内部函数

num1=func()
num2=sum(2)
print(type(num1))
print(type(num2))

print(num2(4))

输出为:
在这里插入图片描述

阐述一下过程:
print(num2(4))在执行过程中,由于num2=sum(2),所以外部函数作用域变量a=2,num2(4)代表内部函数变量为4。
再看一个简单的计数器例子:

def counter(first=0):
	# 计数起点默认为0
	cmt=[first]
	def add_one():
		cnt[0]+=1
		return cnt[0]
	return add_one

num5=counter(5)
# 计数起点为5
num10=counter(10)
# 计数起点为10
print(num5())
print(num5())
print(num5())
print(num5())
print(num10())
print(num10())
print(num10())

输出为:
在这里插入图片描述

3.闭包的lambda函数写法

def a_line(a,b):
	return lambda x:a*x+b

line1= a_line(3,5)
line2= a_line(5,10)
print(line1(10))
print(line2(20))

输出为:
在这里插入图片描述

4.闭包的作用与缺点

以3中所展示的程序为例:
计算y=a*x+b中,若a和b固定,每次随着x的变化,求出的y值也会不断地变化。但是每次都要代入a和b这两个固定的值。所以引入了闭包的概念。

def a_line(a,b):
	def ex(x):
		return a*x+b
	return ex

line1= a_line(3,5)
print(line1(10))

过程等同于

def a_line(a,b):
	a=3
	b=5
	def ex(x):
		return a*x+b
		# 在这里x=10
	return ex

闭包的作用:
1.可以读取函数内部的变量。

2.让这些变量的值始终保存在内存中。这是因为闭包的执行依赖外部函数中的内存,只有闭包执行完,才会释放变量所占的内存。在工程中,希望变量长期驻扎在内存当中(一般函数执行完毕,变量和参数会被销毁)中的场合可以用到闭包。
闭包的问题:
由于闭包会使得函数中的变量都被保存在内存中,内存消耗大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能会造成内存泄露。

解决方法:在退出函数之前,将不使用的局部变量全部删掉
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值