将解压缩参数传递给Python时打印时出现语法错误

时间:2011-11-09 07:56:14

标签: python python-2.7 argument-unpacking

而不是简单的调试/日志打印:

print "error ", error_number

我想使用一个日志函数,我可以在需要时展开这样的东西:

def log(condition, *message):
    if(<do something here...>):
        print(*message)
        <perhaps do something more...>

并将其称为:

log(condition, "error ", error_number)

但是我收到以下语法错误:

print *message
      ^ SyntaxError: invalid syntax

这是打印功能的限制还是有某种方法可以使它工作?如果没有,是否有相当于我可以使用的印刷品?

我正在使用Python 2.7 ...

4 个答案:

答案 0 :(得分:9)

print不是Python 2.x中的函数。在第一个片段中,您正在打印元组,而最后一个片段的语法无效。如果要使用打印功能,则需要通过from __future__ import print_function启用它。

答案 1 :(得分:7)

如果您不想使用__future__,可以像这样定义日志记录功能:

def log(condition, *message):
    if(<do something here...>):
        print ' '.join(str(a) for a in message)
        <perhaps do something more...>

答案 2 :(得分:2)

你应该直接使用print message,这就足够了(它会打印额外参数的元组)。


对以前的答案几乎没有补充:在Python 2.x中,print不是函数而是声明, print(arg1, arg2)有效...使用{{ 1}}关于元组print的声明。

这与(arg1, arg2)略有不同,可以看出:

print arg1, arg2

现在,除了themel的回答:

案例1 :未使用>>> print 'aaa', 'bbb' aaa bbb >>> print('aaa', 'bbb') ('aaa', 'bbb') 扩展参数元组

*

结果是一个元组的元组。

案例2 :扩展>>> def p(*args): ... a(args) # <== args is a tuple >>> def a(*args): ... print args # <== args is a tuple (but nothing else can be used) >>> p('bb') (('bb',),) 中的参数:

p

结果是赋予>>> def p(*args): ... a(*args) # <== now arguments are expanding ... >>> p('bb') ('bb',) 的参数元组。

所以p正确使用,但在声明中不允许这样做。

答案 3 :(得分:-2)

您只需使用*args声明参数元组,而不是访问它。请参阅example in the docs

def write_multiple_items(file, separator, *args):
    file.write(separator.join(args))

你得到SyntaxError这一事实应该会让你知道这与print毫无关系。