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

例3:

li = ['1', '3', '', '5', '7', ' ', None, 0]
li = filter(lambda n: n, li)
print(list(li))

[‘1’, ‘3’, ‘5’, ‘7’, ’ ']

闭包

闭包的概念:

  1. 闭包只会出现在嵌套函数中

  2. 内层函数对外层函数非全局变量的引用(使用),就会形成闭包。被引用的非全局变量称为自由变量,这个自由变量会与内层函数产生一个绑定关系,当外层函数调用结束后,自由变量不会消失。

闭包的作用:

保证数据安全

例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’,) # 自由变量

你可能感兴趣的:(102,Python,学习笔记)