Python 修饰函数中的参数传递

Python 修饰函数中的参数传递,python,Python,一个简单的装饰器什么也不做,可以这样做: def decorator(func): return func # don't need to call! @decorator def print_word(word='python'): print (word) 这将运行良好: >>> print_word() python 但是如果我把它包装在一个内部函数中,它被称为: def decorator(func): def _func(*args, *

一个简单的装饰器什么也不做,可以这样做:

def decorator(func):
    return func # don't need to call!

@decorator
def print_word(word='python'):
    print (word)
这将运行良好:

>>> print_word()
python
但是如果我把它包装在一个内部函数中,它被称为:

def decorator(func):
    def _func(*args, **kwargs):
        print ("Args: %s | Kwargs: %s" % (args, kwargs))
        return func(*args, **kwargs) # <== Here I need to "call" it with ()
    return _func

@decorator
def print_word(word='python'):
    print (word)

>>> print_word('ok')
Args: ('ok',) | Kwargs: {}
ok
def decorator(func):
定义函数(*args,**kwargs):
打印(“Args:%s | Kwargs:%s”%(Args,Kwargs))
return func(*args,**kwargs)#>>打印单词('ok')
Args:('ok',)| Kwargs:{}
好啊
为什么这两种方法不同?调用
\u func
如何将其“绑定”到
\u func(*args,**kwargs)

因为它是一个装饰程序,我们希望它返回一些可以调用的东西

    return func # don't need to call!
对,因为
func
是我们将返回的“可以调用的东西”。装潢师没有效果

然后,如果我把它包装在一个内部函数中,它被称为

我们使用
\u func
所做的是创建一个新函数,该函数将由装饰程序返回,并根据传入的
func
定义其行为。因此,在调用decorator时,我们不调用
func
;但是我们确实在
\u func
的主体中调用它,因为当执行
\u func
时,我们就是这样使
func
执行的

为什么这两种方法不同

我不明白这个问题。他们有什么相同之处?他们都在定义一个装饰师。他们做这件事的方式完全不同

调用
\u func
如何绑定它


我不明白你在这里说的绑定是什么意思,
\u func
在这段代码中不会直接被名字调用。调用
print\u word
时会调用它,因为装饰程序已将
print\u word
替换为本地创建的
\u func
。(每次使用decorator时,都会生成一个具有相同
\u func
名称的单独函数。这就是您遇到的问题吗?

您的decorator实际上是在执行赋值
print\u func=\u func
func
是对
print\u word
的原始定义的引用。这就是你要问的吗?有什么不同?你说的“束缚”是什么意思?我想知道你在哪里困惑。你可能还想通读一遍。
    return func # don't need to call!