打印*参数中的项目

2024-04-20 08:40:05 发布

您现在位置:Python中文网/ 问答频道 /正文

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

  • “嗨,约翰”
  • “嗨,汤姆”
  • “嗨,约翰”
  • “嗨,汤姆”

有人能解释一下为什么.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")

这是我的电流输出:

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

Tags: informatforobjectdefargshiwrapper
2条回答

问题不在装修工身上。它在format中。你知道吗

 "hi {}".format("john", "tom")

只打印“john”,因为您只使用格式化字符串中的第一个参数。换成eg

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")

相关问题 更多 >