我想知道为什么'print'不能在python map函数中使用?
我假设print也是一个函数,因此这应该可以作为map作为文档的函数使用:map(function, iterable, ...)
a=[1,2,3,4]
map(print,a)
答案 0 :(得分:2)
您没有迭代map()
对象,因此不会进行任何函数调用。 map()
不会立即应用这些电话;只有当您从迭代器中搜索结果时,才会绘制输入序列中的元素并应用print()
函数。
如果您遍历代码有效的map()
对象;例如,使用list()
调用:
>>> a = [1, 2, 3, 4]
>>> it = map(print, a)
>>> list(it)
1
2
3
4
[None, None, None, None]
答案 1 :(得分:1)
在python-3.x中,您实际可以在print
中应用map
。 print
将始终返回None
,但这不是真正的问题。
python-3.x唯一的问题是 map
工作懒惰:它返回的生成器只会在需要时计算元素。为了让Python工作,您需要以某种方式实现 map
的结果。例如,您可以使用list(..)
:
$ python3
Python 3.5.2 (default, Nov 17 2016, 17:05:23)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> a=[1,2,3,4]
>>> list(map(print,a))
1
2
3
4
[None, None, None, None]
在pyton-2.7中,print
不是函数,因此您无法将其提供给map
。
答案 2 :(得分:1)
在Python 2中,print
不是函数,因此map(print,[])
会触发无效语法。
Python 2解决方法是使用 real 函数写入标准输出。 sys.stdout.write
几乎可以成为候选者,但您必须添加换行符+字符串转换以大致模拟print
所做的事情:
map(lambda x: sys.stdout.write(str(x)+"\n"),a)
它适用于python 3(但除非你强制迭代,否则map
除外)
编辑:from __future__ import print_function
也允许使用print
作为函数