闭包的定义和用法

闭包:内部函数引导外部函数的参数。

# 未使用闭包前
def func():
    a = 1
    b = 2
    return a+b
#使用闭包后
 def sum(a):
	def add(b):
		return a+b
 	return add # 外部函数返回内部函数的引用

注:

  • add :函数名称或函数饮用
  • add() :函数的调用

闭包的使用

  1. 使用闭包实现计数器
# 默认参数为0,如果没有传入就默认为0
def counter(first=0): 
    cnt  = [first]
    def add_one():
        cnt[0] += 1
        return cnt[0]
    return add_one

# 从5开始的计数器
num5 = counter(5)
# 从10开始的计数器
num10 = counter(10)
# 输出计数器的值,同一个计数器,每调用一次就+1
print(num5())
  1. 使用闭包实现数学计算,比如a*x + b = y?

该计算需要3个参数,如果使用普通函数计算,每次需要传入的参数比较多。以下使用闭包实现

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

line1= a_line(2,3) # a=2,b=3
print(line1(10))
print(line1(100))
line2 = a_line(3,6)  # a= 3,b=6
print(line2(10))

上述内部函数中可使用更加简洁的lambda实现

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

line1= a_line(2,3) # a=2,b=3
print(line1(10))
print(line1(100))
line2 = a_line(3,6)  # a= 3,b=6
print(line2(10))

闭包的特点

  1. 由传递变量的方式变成传递函数的方式
  2. 调用的参数比普通参数的少
  3. 代码优雅
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值