闭包:内部函数引导外部函数的参数。
# 未使用闭包前
def func():
a = 1
b = 2
return a+b
#使用闭包后
def sum(a):
def add(b):
return a+b
return add # 外部函数返回内部函数的引用
注:
- add :函数名称或函数饮用
- add() :函数的调用
闭包的使用
- 使用闭包实现计数器
# 默认参数为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())
- 使用闭包实现数学计算,比如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))
闭包的特点
- 由传递变量的方式变成传递函数的方式
- 调用的参数比普通参数的少
- 代码优雅
396

被折叠的 条评论
为什么被折叠?



