gpt4 book ai didi

python - 解释Python装饰器是如何工作的

转载 作者:行者123 更新时间:2023-11-30 23:27:59 26 4
gpt4 key购买 nike

这是 python 装饰器的示例。我无法理解它的工作原理。请解释一下给定示例的控制流程。我将不胜感激。

def helloSolarSystem(original_function):
def new_function(*args, **kwargs):
original_function(*args, **kwargs)
print("Hello, solar system!")
return new_function

def helloGalaxy(original_function):
def new_function(*args, **kwargs):
original_function(*args, **kwargs)
print("Hello, galaxy!")
return new_function

@helloGalaxy
@helloSolarSystem
def hello(targetName=None):
if targetName:
print("Hello, " + targetName +"!")
else:
print("Hello, world!")
hello("Earth")

最佳答案

装饰器是应用higher-order functions的语法糖。在Python中。高阶函数是一种将一个或多个函数作为输入并返回一个函数的函数。即

h(x) = f(g(x))

其中 f() 是一个高阶函数,它接受单个参数的函数 g(x),并返回单个参数的函数,h(x)。您可以将 f() 视为修改 g() 的行为。

高阶函数为 composable (根据定义),所以在您的具体示例中,装饰器语法,

@helloGalaxy
@helloSolarSystem
def hello(targetName=None):
...

相当于,

hello = helloGalaxy(helloSolarSystem(hello))

通过将 hello 替换为 helloSolarSystem,然后将结果替换为 helloGalaxy,我们得到等效的函数调用,

def hello(targetName=None):
if targetName: |
print("Hello, " + targetName + "!") | (1) |
else: | | (2) |
print("Hello, world!") | | | (3)
print("Hello, solar system!") | |
print("Hello, galaxy!") |

其中 (1) 是原始 hello() 的应用程序,(2) 是以下应用程序,

def helloSolarSystem(original_function):
def new_function(*args, **kwargs):
original_function(*args, **kwargs) <-- (1)
print("Hello, solar system!")
return new_function

并且(3)是应用,

def helloGalaxy(original_function):
def new_function(*args, **kwargs):
original_function(*args, **kwargs) <-- (2)
print("Hello, galaxy!")
return new_function

关于python - 解释Python装饰器是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21845557/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com