Python 以*参数打印项目

Python 以*参数打印项目,python,Python,我正在实现decorators并试图获得输出 嗨,约翰 嗨,汤姆 嗨,约翰 嗨,汤姆 有人能解释一下为什么args中i的.formati不遍历John和Tom,而是打印变量args的位置吗 这是我当前的输出: Hi <generator object functionToPrint.<locals>.<genexpr> at 0x03CEFD80> Hi <generator object functionToPrint.<locals>.&

我正在实现decorators并试图获得输出

嗨,约翰 嗨,汤姆 嗨,约翰 嗨,汤姆 有人能解释一下为什么args中i的.formati不遍历John和Tom,而是打印变量args的位置吗

这是我当前的输出:

Hi <generator object functionToPrint.<locals>.<genexpr> at 0x03CEFD80>
Hi <generator object functionToPrint.<locals>.<genexpr> at 0x03CDA1B0>

问题不在装修工身上。它的格式是

将只打印john,因为您只使用格式化字符串中的第一个参数。用乙二醇代替它

print ("\n".join(len(args) *["Hi {}"])).format(*args))

您的内联for循环位于稍微错误的位置。您希望反复调用Hi格式,而不是将列表传递给Hi。因为这将生成多个值,所以需要将它们重新连接在一起

def doDouble (func):
    def wrapper_doDouble (*args):
        func(*args)
        func(*args)
    return wrapper_doDouble

@doDouble
def functionToPrint(*args):
    print ("\n".join("Hi {}".format(i) for i in args))

functionToPrint("John", "Tom")

这意味着我必须知道传入的参数数量。我认为*args的意义在于我并不总是知道这一点。是否可以在一行代码上设置为使用.format接受任意数量的参数?正如您所看到的,我试图使用for循环每次都更改I的值
print ("\n".join(len(args) *["Hi {}"])).format(*args))
def doDouble (func):
    def wrapper_doDouble (*args):
        func(*args)
        func(*args)
    return wrapper_doDouble

@doDouble
def functionToPrint(*args):
    print ("\n".join("Hi {}".format(i) for i in args))

functionToPrint("John", "Tom")