而不是简单的调试/日志打印:
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 ...
答案 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
毫无关系。