【问题标题】:Unpacking a list in print for Python 2为 Python 2 解压打印列表
【发布时间】:2017-04-24 03:30:59
【问题描述】:

我无法理解为什么解包不适用于 Python 2.7 中的 list 和 print 语句:

>>> l=['a', 'b', 'c']
>>> print (*l, sep='')

Python 3.x 可以正常工作并打印:

abc

但是,Python 2.7 会引发错误:

 print (*l, sep='')
       ^
SyntaxError: invalid syntax

如何使它适用于 Python 2.7?

我知道我也可以使用 join 来编写代码:''.join(l)

【问题讨论】:

  • Python 2 中没有* 运算符。
  • @EliSadoff:当然有。这是multiplication operator(在 2 和 3 中)。但是,调用或函数定义中的* 不是运算符,但在 Python 2 中确实存在。
  • @MartijnPieters 让我纠正一下,python 2 中没有一元 * 运算符。
  • @EliSadoff:Python 3 中也没有。它不是运算符。它是更大的语法结构的一部分。比如callfunction definition。在 Python 3 中,expression lists 现在支持 Python 2 中不支持的语法。

标签: python python-2.7 python-3.x printing


【解决方案1】:

因为print 在 Python 2 中不是函数;解压列表并将其作为位置参数提供如果它不是函数,则不可能。

您需要从 __future__ 导入 print_function 以支持此功能:

>>> from __future__ import print_function

现在可以解包了:

>>> l = ['a', 'b', 'c']
>>> print(*l, sep='')
abc

【讨论】:

    【解决方案2】:

    你有两个选择:

    • 转换为字符串并手动加入空格:

      print ''.join(map(str, l))
      
    • 使用print() function,通过使用禁用printfrom __future__ 导入语句

      from __future__ import print_function
      
      print(*l, sep='')
      

      或直接通过__builtin__ module访问该函数:

      import __builtin__
      print_function = getattr(__builtin__, 'print')
      
      print_function(*l, sep='')
      

      相同的函数在 Python 2 和 3 中都可用,但在 Python 2 中,如果不首先禁用关键字,则不能直接使用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-15
      • 1970-01-01
      • 2020-09-04
      • 2015-11-06
      • 1970-01-01
      • 2022-06-12
      • 2015-10-16
      • 2013-12-16
      相关资源
      最近更新 更多