
一、函数
函数是实现特定功能的代码段的封装,在需要时可以多次调用函数来实现该功能。
Python 如下定义一个函数,我们可以通过任何变量来将此函数进行赋值操作,如下:
def greet(): return "Hello!" # 将方法赋给变量(无括号,得到方法对象) greet_func = greet # 调用存储在变量中的方法 print(greet_func()) print(type(greet_func)) # 输出 greet_func 的类型,由于 greet_func 指向的是 greet 函数对象,所以输出结果为 <class 'function'> print(type(greet_func())) # 先调用 greet_func 所指向的函数,得到返回值 "Hello!",然后输出该返回值的类型,结果为 <class 'str'>。 # 有括号,直接调用方法并将结果赋给变量 greet_result = greet() print(greet_result) print(type(greet_result)) # 输出 greet_result 的类型,由于它存储的是字符串,所以输出结果为 <class 'str'> print(type(greet_result())) # 报错 greet_result 存储的是字符串 "Hello!",而不是函数对象,所以不能像调用函数一样在它后面加上括号 ()

在 Python 中,函数是一等公民,这意味着函数可以像其他对象(如整数、字符串等)一样被赋值给变量。这里将 greet 函数对象赋值给了变量 greet_func。此时 greet_func 实际上指向的是 greet 函数本身,而不是函数的返回值;而 greet_result = greet() 是先调用 greet 方法,然后把返回值赋给 greet_result 变量。
二、闭包
2.1 概念
在 Python 中,闭包(Closure)是一种特殊的函数,它由一个函数和该函数所引用的外部作用域中的变量组成。即使外部函数已经执行完毕,其局部变量的生命周期也会因闭包的存在而得以延长,闭包可以继续访问这些变量。
简单来说,闭包允许函数访问并操作其定义所在的外部作用域中的变量,即使该外部作用域已经结束。
构成闭包需要满足以下三个条件:
- 存在一个嵌套函数,即在一个函数内部定义另一个函数。
- 嵌套函数引用了外部函数的局部变量。
- 外部函数返回嵌套函数。
2.2 闭包的应用场景
- 数据封装和隐藏:可以将数据隐藏在闭包内部,只通过闭包提供的接口来访问和修改数据。
- 实现回调函数:在事件驱动编程中,闭包可以作为回调函数,保存一些上下文信息。
- 实现装饰器:装饰器是闭包的一种常见应用,用于在不修改原函数代码的情况下,为函数添加额外的功能。




