Python 为什么是;包装纸;是一个比“装饰”更好的名字;加法器;?

Python 为什么是;包装纸;是一个比“装饰”更好的名字;加法器;?,python,wrapper,Python,Wrapper,装饰器的一个简单示例是: def strong(func): def wrapper(): return '<strong>' + func() + '</strong>' return wrapper @strong def greet(): return 'Hello!' def strong(函数): def包装器(): 返回“”+func()+”” 返回包装器 @强壮的 def greet(): 回答“你好!” wrap

装饰器的一个简单示例是:

def strong(func):
    def wrapper():
        return '<strong>' + func() + '</strong>'
    return wrapper
@strong
def greet():
    return 'Hello!'
def strong(函数):
def包装器():
返回“”+func()+””
返回包装器
@强壮的
def greet():
回答“你好!”
wrapper
是高阶函数中“内部一阶函数”的名称
strong

我的问题是,
wrapper
这个词没有真正的意义,只是为了迷惑新手。为什么不使用“加法器”,因为它可以直观地识别

在面向对象编程中,decorator模式是一种设计模式,它允许将行为静态或动态添加到单个对象,而不影响同一类中其他对象的行为。[1]

维基百科解释中的关键词是“添加”

以及:

将某物添加到物体或地方,尤其是为了使其更具吸引力:

关键字也是“添加”


那么为什么
wrapper
比“adder”更好呢?

当您使用装饰器时,您已经将原始代码包装到另一个函数中,使原始函数不可见。继续你的例子

def strong(func):
    def wrapper():
        return '<strong>' + func() + '</strong>'
    return wrapper
@strong
def greet():
    return 'Hello!'

def weak_greet():
    return 'hi'

print(greet)
print(weak_greet)

现在看起来像您的原始函数,并且可以进行pickle。这就像包装一份惊喜礼物,然后用包装纸再次包装礼物,告诉你(非常详细)惊喜是什么

添加了该行为。代码是包装的。因为函数将字符串包装在
标记中,IMO对它的功能更具描述性,尽管这仍取决于个人意见。“加法器”在计算机领域已经有了公认的含义。“包装器”一点也不混乱:修饰的函数被包装在另一个函数中。Python设计者也对这个术语表示赞许:请参见
functools.wrapps()
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu>属性。在这种情况下,这两个属性都是;在这种情况下,正如Li357所说,标签也会将
greet
返回的字符串直接包装起来。我投票将这个问题作为离题题来结束,因为它被交叉贴到了softwareengineering上,那里有一个可接受的答案。
<function strong.<locals>.wrapper at 0x000000000129A268>
<function weak_great at 0x000000000129A2F0>
from functools import wraps
def strong(func):
    @wraps(func)
    def wrapper():
        return '<strong>' + func() + '</strong>'
    return wrapper