我正在实现装饰器,并试图获取输出
请有人可以解释为什么.format(i for i in args)不进行迭代John,Tom而是打印变量的位置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)
问题不在装饰器中。它在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)