函数对象与闭包
函数名的多种用法
用法一:函数名当做变量名赋值
def index():
    print('来自函数index')
res = index  # 让res也指向index指向的函数体代码
res()  # 相当于执行了index()
# 输出:来自函数index
用法二:函数名当函数的实参
def index():
    print('来自函数index')
def func(a):
    a() 
func(index)  # 实参index传给形参a,func函数内部的a()变成了index()
# 输出:来自函数index
用法三:函数名当做函数的返回值
def func():
    return index  # 将函数名当做返回值
def index():
    print('来自函数index')
res = func()  # res接收函数名index
res()  # 相当于执行了index()
# 输出:来自函数index
用法4:函数名作为容器类型的元素
def index():
    print('来自函数index')
l1 = [1, 2, 3, index]
l1[-1]()  # 相当于执行了index()
# 输出:来自函数index
闭包函数
闭包概念
- 闭:定义在函数内部的函数
- 包:内部函数使用了外层函数名称空间中的名字
# 闭包函数
def outer():
    x = 111
    # 定义在函数内部的函数
    def inner():
        # 使用了外层函数名称空间中的名字
        print(x)
    return inner
x = 666
res = outer()
res()  # 输出:111  
实际应用
闭包函数是给函数体传参的另外一种方式
def outer(username):
    def index():
        print(username)
    return index
res = outer('kevin')  # 形参username与值kevin临时绑定
res()  # 输出:kevin
res1 = outer('jason')  # 形参username与值jason临时绑定
res1()  # 输出:jason
这时候有人就很迷惑了,明明只要定义一个函数index()就可以了,为什么要用outer()包起来传参呢?别急,这是为接下来的内容做铺垫用的。


 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号