【问题标题】:why we can not apply map function to print python?为什么我们不能应用 map 函数来打印 python?
【发布时间】:2017-06-17 03:00:20
【问题描述】:

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

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

【问题讨论】:

  • 你其实可以...
  • 你知道print 是做什么的吗?你知道它返回什么吗?
  • 我认为你不能在 python 2 中,因为 print 只是 python 3 中的一个函数。
  • @Jean-FrançoisFabre: from __future__ import print_function 也可以在 Python 2 中使用......
  • @Willem,您对标签的看法是正确的。我首先尝试了地图,但得到了一本字典。我没有添加标签的声誉。

标签: python printing


【解决方案1】:

您没有迭代 map() 对象,因此不会进行任何函数调用。 map() 不会立即应用调用;只有当您从迭代器中提取结果时,才会绘制输入序列中的元素并应用print() 函数。

如果您循环访问 map() 对象,则代码有效;例如,通过使用list() 调用:

>>> a = [1, 2, 3, 4]
>>> it = map(print, a)
>>> list(it)
1
2
3
4
[None, None, None, None]

【讨论】:

    【解决方案2】:

    中,您实际上可以map 中应用printprint总是返回 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

    【讨论】:

    • 威廉,感谢您的回复。为什么不打印?应该是按照地图的定义打印列表中的元素吗?
    • @curious: 因为print 函数不是returns 的东西,在这种情况下Python 会让它返回None。所以最后一行是map的结果。
    • 知道了,它没有返回,因为 print 没有返回任何东西
    • @curious:确实,它在标准输出上打印,但在任何情况下都不会生成结果。
    • @谢谢,威廉
    【解决方案3】:

    在 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 用作函数

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-19
      • 2016-02-01
      • 2011-11-19
      • 1970-01-01
      • 2013-04-19
      • 1970-01-01
      • 2020-09-24
      相关资源
      最近更新 更多