18

对于正常功能,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

蟒蛇会抱怨:

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

有什么print特别之处?也不print(x)是有效的函数调用吗?以上代码在python 2.7下测试。

4

6 回答 6

22

在 Python 2.x 中,print是语句,而不是函数。如果您在 Python 3.x 中尝试此操作,它将起作用。

在 Python 2.x 中,你可以说它print(x)不是语法错误,但它实际上不是函数调用。正如 ,和Python 2.x中的一样1 + (3)1 + 3print(x)print x

在 Python 2.x 中,您可以这样做:

def prn(x):
    print x

然后你可以这样做:

map(prn, lst)

它会起作用。请注意,您可能不想这样做,lst = map(prn, lst)因为prn()返回None,因此您将使用仅包含相同长度的值列表替换值列表None

编辑:Python 2.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/

于 2012-08-01T21:53:23.533 回答
8

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

from __future__ import print_function
于 2012-08-01T21:58:49.667 回答
4

正如其他人所说,在 Python 2.xprint中是一个声明。如果你真的想在 Python 2.x 中这样做,你可以使用pprint

from pprint import pprint
l = [1, 2, 3, 4, 5]
p = map(pprint, l)
于 2012-08-01T21:54:58.180 回答
2

因为print不是函数。

但是您当然可以制作打印包装:

>>> def p(x):
...   print x
... 
>>> l = [1, 2, 3, 4, 5]
>>> l = map(p, l)
1
2
3
4
5
于 2012-08-01T21:55:23.187 回答
1

从您的行print l中,我假设这是 python2,其中print不是函数,而是语句

于 2012-08-01T21:54:02.977 回答
0

上面的答案适用于 Python 2,但不适用于 Python 3,同时对 map 和 print 函数进行了更改。

为了在 Python 3中实现我想要做的事情,我得出的解决方案map(print, lst)是在 print 调用中解压缩列表。

lst = [1, 2, 3]
print(*lst, sep='\n')

输出:

1
2
3

您可以在我对在 lambda 中使用 print的回答中找到更多详细信息。

于 2017-02-22T18:55:22.607 回答