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!