我正在实现装饰器,并试图获取输出
请有人能解释为什么.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")
这是我当前的输出:
Hi <generator object functionToPrint.<locals>.<genexpr> at 0x03CEFD80>
Hi <generator object functionToPrint.<locals>.<genexpr> at 0x03CDA1B0>
答案 0 :(得分:5)
问题不在装饰器中。它在format
中。
"hi {}".format("john", "tom")
将仅显示“ john”,因为您仅在格式化字符串中使用第一个参数。将其替换为例如
print ("\n".join(len(args) *["Hi {}"])).format(*args))
答案 1 :(得分:3)
您的inline for循环位置略有错误。您想重复调用Hi
格式,而不是将列表传递到Hi
中。由于这将生成多个值,因此您需要将它们join
重新放在一起。
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")