13 Python学习之匿名函数和闭包
匿名函数
匿名函数又叫一句话函数,比较简单
语法:
lambda 参数: 返回值
例1:
ret = lambda a, b: a + b # a, b是参数, a + b 是要返回的值
print(ret(1, 2))
3
例2:
ret = lambda a, b: a if a > b else b
print(ret(3, 5))
5
闭包
闭包的概念:
-
闭包只会出现在嵌套函数中
-
内层函数对外层函数非全局变量的引用(使用),就会形成闭包。被引用的非全局变量称为自由变量,这个自由变量会与内层函数产生一个绑定关系,当外层函数调用结束后,自由变量不会消失。
闭包的作用:
保证数据安全
例1:
# 嵌套函数
def make_average():
li = [] # 局部变量li
def average(new_value):
li.append(new_value) # 内存函数调用外层函数非全局变量li
print("列表li的内容是:", li)
return sum(li)/len(li)
return average
ret = make_average()
print(ret(10000))
print(ret(11000))
print(ret(12000))
print(ret(9000))
print(ret.__code__.co_freevars) # 判断一个函数是不是闭包,查看自由变量即可
运行结果是:
列表li的内容是: [10000]
10000.0
列表li的内容是: [10000, 11000]
10500.0
列表li的内容是: [10000, 11000, 12000]
11000.0
列表li的内容是: [10000, 11000, 12000, 9000]
10500.0
自由变量
('li',)