为什么我们不能应用map函数来打印python?

时间:2017-01-31 15:43:06

标签: python printing

我想知道为什么'print'不能在python map函数中使用? 我假设print也是一个函数,因此这应该可以作为map作为文档的函数使用:map(function, iterable, ...)

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

3 个答案:

答案 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)

中,您实际可以print中应用mapprint始终返回None ,但这不是真正的问题。

唯一的问题是 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]

中,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作为函数