11、函数对象和闭包

函数对象

函数对象的含义是,函数可以被当作数据来处理
函数可以被引用
def add(x, y):
    return x + y


func = add
print(func(1, 2))   # 3
函数可以作为容器类型的元素
def add(x, y):
    return x + y


fuc_dic = {'1': add}

函数作为参数传递给另一个函数
def add(x, y):
    return x + y


def func(x, y, f):
    return f(x, y)


print(func(1, 2, add))  # 3

函数的返回值可以是一个函数
def add(x, y):
    return x + y


def bar():
    return add


func = bar()
print(func(1, 2))   # 3

函数的闭与包

函数作用域的关系是在定义完函数时就已经被确定了的,与函数的调用位置无关。
x = 1


def f1():
    def f2():
        print(x)

    return f2


def f3():
    x = 3
    f2 = f1()  # 调用f1()返回函数f2
    f2()  # 需要按照函数定义时的作用关系去执行,与调用位置无关


f3()  # 结果为1

函数被当做数据处理时,始终以自带的作用域为准。若内嵌函数包含对外部函数作用域(而非全局作用域)中变量的引用,那么该’内嵌函数’就是闭包函数,简称闭包(Closures)

闭包的用途

有两种给函数传递参数的方式,一种是直接传参,另外一种是将值“包”给内部函数
def f1(x):
    return -x


def f2(x):
    def inner():
        return -x
    return inner


res = f2(1)
print(res())    # -1

利用闭包的特点,可以完成装饰器的功能
posted @ 2021-08-15 12:59  晴天々⊙雨天  阅读(49)  评论(0)    收藏  举报