在* args中打印项目

EML*_*EML 0 python

我正在实现装饰器,并试图获取输出

  • “你好,约翰”
  • “你好汤姆”
  • “你好,约翰”
  • “你好汤姆”

请有人可以解释为什么.format(i for i in args)不进行迭代JohnTom而是打印变量的位置args

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

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

functionToPrint("John", "Tom")
Run Code Online (Sandbox Code Playgroud)

这是我当前的输出:

Hi <generator object functionToPrint.<locals>.<genexpr> at 0x03CEFD80>
Hi <generator object functionToPrint.<locals>.<genexpr> at 0x03CDA1B0>
Run Code Online (Sandbox Code Playgroud)

blu*_*ote 5

问题不在装饰器中。它在format

 "hi {}".format("john", "tom")
Run Code Online (Sandbox Code Playgroud)

因为您只在格式化字符串中使用第一个参数,所以只会打印“ john”。用例如替换

print ("\n".join(len(args) *["Hi {}"])).format(*args))
Run Code Online (Sandbox Code Playgroud)