对象与闭包函数

发布时间 2023-12-13 21:32:10作者: 桃源氏

对象与闭包函数

一、函数对象

  • 函数对象指的是函数可以被当做 数据 来处理,具体可以分为四个方面的使用函数

[1]函数可以被引用

  • 函数的调用方式中使用表到时,将地址给到其他变量名就是引用
def add(x, y):
    return x + y


add_1 = add

z = add_1(1, 2) # 将函数地址给z变量名
print(z)

[2]函数可以作为容器类型的元素

def add(x, y):
    return x + y


def subtract(x, y):
    return x - y

#可以做为字典里的值
dict_fun = {1: add, 2: subtract}
func_id = int(input("请输入ID:"))  # 请输入ID:1
func = dict_fun[func_id]
print(func(5, 4))  # 9

[3]函数可以作为参数传入传入另一个函数

def add(x, y):
    return x + y


def subtract(x, y):
    return x - y

# add作为subtract函数的一个参数
print(subtract(add(4, 5), 5))  # 4

[4]函数的返回值可以是一个函数

def outer():
    print("这是外层函数!", end=' ')

    def inner():
        print("这是内层函数!")

    return inner

# 用变量接收返回的函数
func = outer()
func()  # 这是外层函数! 这是内层函数!

二、闭包函数

[1]什么是闭包

  • 闭包是指包含对自由变量的函数和对这些变量的引用环境的组合。
  • 基于函数对象的概念,可以将函数返回到任意位置去调用
  • 但作用域的关系是在定义完函数时就已经被确定了的,与函数的调用位置无关。

[2]什么是闭包函数

  • 一个引用了外层函数作用域里的变量的内嵌函数
a = 1


def outer():
    a = 2

    def inner():
        print(a)

    return inner

#inner()函数引用了外部函数outer()作用域里的变量,使用inner()函数就是一个闭包函数
func = outer()
func()  # 2

[3]闭包函数的用途

(1)保持状态

  • 保持状态: 闭包可以用来保持函数调用之间的状态。

(2)函数工厂

  • 函数工厂: 闭包允许创建函数工厂,即可以动态生成函数。
  • 在你的例子中,page 函数就是一个函数工厂,它返回一个根据传入的 url 动态生成的函数

(3)封装

  • 封装: 闭包可以用来实现类似面向对象编程中的封装概念。
  • 通过将函数和其相关的状态(变量)捆绑在一起,形成一个封闭的单元。