5

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

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

4 回答 4

9

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

于 2011-11-09T08:02:10.557 回答
7

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

def log(condition, *message):
    if(<do something here...>):
        print ' '.join(str(a) for a in message)
        <perhaps do something more...>
于 2013-10-26T18:39:08.140 回答
3

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


对先前答案的一点补充:在 Python 2.x 中,print不是函数而是语句, print(arg1, arg2)有效......就像 usingprint元组上的语句一样(arg1, arg2)

print arg1, arg2这与我们看到的有点不同:

>>> print 'aaa', 'bbb'
aaa bbb
>>> print('aaa', 'bbb')
('aaa', 'bbb')

现在,除了themel的回答:

案例1:不使用*扩展参数元组

>>> 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',),)

结果是一个元组的一个元组。

案例 2:扩展参数p

>>> def p(*args):
...      a(*args)  # <== now arguments are expanding
...
>>> p('bb')
('bb',)

结果是一个给定的参数元组p

正确使用也是如此*args,但这在声明中是不允许的。

于 2011-11-09T08:37:11.070 回答
-2

您只是*args用来声明参数元组,而不是访问它。请参阅文档中的示例

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

无论如何,您得到 a 的事实SyntaxError应该提示您这与 无关。print

于 2011-11-09T08:00:53.510 回答