1. 闭包(Closure)
闭包是指一个函数(称为内部函数)和与其相关的引用环境(通常是一个包含函数定义时存在的非全局作用域)的组合。闭包允许函数访问其定义时的作用域外部的变量。
下面是一个简单的闭包示例:
pythonCopy Code
def outer_function(x):
def inner_function(y):
return x + y
return inner_function
# 创建一个闭包
closure = outer_function(10)
# 使用闭包
result = closure(5) # inner_function 访问了 outer_function 的 x
print(result) # 输出: 15
在这个例子中,inner_function
是一个闭包,它可以访问外部函数 outer_function
中的变量 x
。
2. 装饰器(Decorator)
装饰器是一种Python的函数,它可以用来修改其他函数的行为。装饰器本身是一个函数,它接受一个函数作为参数,并返回一个新的函数。
下面是一个简单的装饰器示例:
pythonCopy Code
# 装饰器函数
def my_decorator(func):
def wrapper():
print("在调用函数之前做一些操作")
func() # 调用原始函数
print("在调用函数之后做一些操作")
return wrapper
# 被装饰的函数
def say_hello():
print("你好!")
# 使用装饰器
say_hello = my_decorator(say_hello)
# 调用被装饰后的函数
say_hello()
输出:
Copy Code
在调用函数之前做一些操作 你好! 在调用函数之后做一些操作
3. 装饰器案例
通常,我们会使用 @
符号来应用装饰器,这样代码更加简洁和易读。下面是上面示例的装饰器版本:
pythonCopy Code
# 装饰器函数
def my_decorator(func):
def wrapper():
print("在调用函数之前做一些操作")
func() # 调用原始函数
print("在调用函数之后做一些操作")
return wrapper
# 使用装饰器
@my_decorator
def say_hello():
print("你好!")
# 调用被装饰后的函数
say_hello(
Copy Code
在调用函数之前做一些操作 你好! 在调用函数之后做一些操作
在这个例子中,my_decorator
函数就是一个装饰器,它修改了 say_hello
函数的行为,使其在调用前后打印额外的信息。