Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用参数修饰函数时,参数不能按预期工作_Python_Python Decorators - Fatal编程技术网

Python 使用参数修饰函数时,参数不能按预期工作

Python 使用参数修饰函数时,参数不能按预期工作,python,python-decorators,Python,Python Decorators,我有一个装饰程序,它必须向字符串添加HTML标记。 如果必须包装一个固定的字符串,则装饰器可以正常工作 def tagger(fn): def wrapper(*x): return "<strong>" + fn() + "</strong>" return wrapper @tagger def foo(): return 'Hello' print(foo()) 我做错了

我有一个装饰程序,它必须向字符串添加HTML标记。 如果必须包装一个固定的字符串,则装饰器可以正常工作

def tagger(fn):
    def wrapper(*x):
        return "<strong>" + fn() + "</strong>"
    return wrapper

@tagger
def foo():
    return 'Hello'

print(foo())     

我做错了什么?

您错过了将任何*参数转发到
fn()
呼叫中

def tagger(fn):
        def wrapper(*x):
               return "<strong>" + fn(*x) + "</strong>"  # <-- This will call foo(*x)
        return wrapper
@tagger
def foo(x):
    return str(x)

print(foo('Hello'))
def标记器(fn):
def包装(*x):

返回“”+fn(*x)+“”#您没有将任何*参数转发到
fn()调用中

def tagger(fn):
        def wrapper(*x):
               return "<strong>" + fn(*x) + "</strong>"  # <-- This will call foo(*x)
        return wrapper
@tagger
def foo(x):
    return str(x)

print(foo('Hello'))
def标记器(fn):
def包装(*x):

返回“”+fn(*x)+“”#您永远不会传递参数。包装器中的表达式
fn()
是对原始修饰函数的调用,但不传递参数

装饰器包装器接受任意位置参数作为
*x
,将它们传递到
fn()
调用:

def tagger(fn):
    def wrapper(*x):
        return "<strong>" + fn(*x) + "</strong>"
    return wrapper

现在,decorator也可以用于接受关键字参数的函数。

您永远不会传递参数。包装器中的表达式
fn()
是对原始修饰函数的调用,但不传递参数

装饰器包装器接受任意位置参数作为
*x
,将它们传递到
fn()
调用:

def tagger(fn):
    def wrapper(*x):
        return "<strong>" + fn(*x) + "</strong>"
    return wrapper

现在,decorator也可以用于接受关键字参数的函数。

fn()
调用
foo()
foo
需要一个参数,但您没有传递一个参数。你是想把
*x
传过去吗<代码>fn(*x)
.TNX。我错过了。
fn()
调用
foo()
foo
需要一个参数,但您没有传递一个参数。你是想把
*x
传过去吗<代码>fn(*x)
.TNX。我错过了。