为什么地图(打印,清单)不起作用?

2024-06-06 09:46:29 发布

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

对于正常函数,map工作良好:

def increment(n):
    return n+1
l = [1, 2, 3, 4, 5]
l = map(increment, l)
print l
>>> [2, 3, 4, 5, 6]

但是,如果将print放在map函数中:

l = [1, 2, 3, 4, 5]
l = map(print, l)
print l

Python会抱怨:

l = map(print, l)
            ^
SyntaxError: invalid syntax

什么使print特别?print(x)不也是一个有效的函数调用吗?以上代码是在Python2.7下测试的。


Tags: 函数代码mapreturndefprintsyntax函数调用
3条回答

正如其他人所说,在Python 2.x中print是一个语句。如果您真的想在Python 2.x中执行此操作,可以使用pprint

from pprint import pprint
l = [1, 2, 3, 4, 5]
p = map(pprint, l)

在Python 2.x中,print是一个语句,而不是函数。如果您在Python3.x中尝试这个方法,它将起作用。

在Python2.x中,可以说print(x),这不是语法错误,但实际上不是函数调用。就像1 + (3)1 + 3一样,print(x)与Python 2.x中的print x相同

在Python2.x中,您可以执行以下操作:

def prn(x):
    print x

然后你可以:

map(prn, lst)

它会起作用的。请注意,您可能不想执行lst = map(prn, lst),因为prn()返回None,所以您将用相同长度的值列表None替换值列表。

编辑:Python2.x的另外两个解决方案

如果要完全更改print的行为,可以执行以下操作:

from __future__ import print_function

map(print, lst)

这使得print成为一个函数,就像在Python 3.x中一样,因此它可以与map()一起工作。

或者,你可以这样做:

from pprint import pprint

map(pprint, lst)

pprint()是一个打印东西的函数,它是一个内置的。我不确定它与默认的print有什么不同(它说它是一个“漂亮的打印”函数,但我不确定它到底有什么不同)。

另外,根据PEP 8标准,不建议使用l作为变量名,因此我在示例中使用lst

http://www.python.org/dev/peps/pep-0008/

在2.x中映射打印的更好方法是

from __future__ import print_function

相关问题 更多 >