在打印中使用*(splat)运算符

发布于 2021-01-29 14:56:45

我经常使用Python的print语句来显示数据。是的,我知道'%s %d' % ('abc', 123)方法,'{} {}'.format('abc', 123)方法和' '.join(('abc', str(123)))方法。我也知道splat运算符(*)可用于将Iterable扩展为函数参数。但是,我似乎无法通过print声明来做到这一点。使用清单:

>>> l = [1, 2, 3]
>>> l
[1, 2, 3]
>>> print l
[1, 2, 3]
>>> '{} {} {}'.format(*l)
'1 2 3'
>>> print *l
  File "<stdin>", line 1
    print *l
          ^
SyntaxError: invalid syntax

使用元组:

>>> t = (4, 5, 6)
>>> t
(4, 5, 6)
>>> print t
(4, 5, 6)
>>> '%d %d %d' % t
'4 5 6'
>>> '{} {} {}'.format(*t)
'4 5 6'
>>> print *t
  File "<stdin>", line 1
    print *t
          ^
SyntaxError: invalid syntax

我想念什么吗?这根本不可能吗?接下来到底是什么print?该文档说该print关键字后面是逗号分隔的表达式列表,但是我想这与列表数据类型不同。我在SO和Web上做了很多挖掘工作,却没有找到明确的解释。

我正在使用Python 2.7.6。

关注者
0
被浏览
68
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    print是Python
    2.x中的语句,不支持*语法。您可以从文档中print列出的语法中看到这一点:

    print_stmt :: =“ print”([expression(“,” expression)* [“,”]]
                    | “ >>”表达式[(“,”表达式)+ [“,”]])
    

    请注意*print关键字之后如何没有使用选项。


    然而,*语法 支持内部函数调用,它只是恰巧print是在Python
    3.X的功能
    。这意味着您可以从导入__future__

    from __future__ import print_function
    

    然后使用:

    print(*l)
    

    演示:

    >>> # Python 2.x interpreter
    >>> from __future__ import print_function
    >>> l = [1, 2, 3]
    >>> print(*l)
    1 2 3
    >>>
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看