当前位置: 首页 > 面试题库 >

Python:Python中的Splat / unpack运算符*不能在表达式中使用吗?

盖向荣
2023-03-14
问题内容

有人知道为什么*不能在涉及迭代器/列表/元组的表达式中使用一元()运算符的原因吗?

为什么只限于功能解压缩?还是我认为这是错误的?

例如:

>>> [1,2,3, *[4,5,6]]
File "<stdin>", line 1
[1,2,3, *[4,5,6]]
        ^
SyntaxError: invalid syntax

*操作员为何不:

[1, 2, 3, *[4, 5, 6]] give [1, 2, 3, 4, 5, 6]

而当*运算符与函数调用一起使用时,它的确会扩展:

f(*[4, 5, 6]) is equivalent to f(4, 5, 6)

使用列表时,+和之间存在相似之处,而*使用其他类型扩展列表时则没有相似之处。

例如:

# This works
gen = (x for x in range(10))

def hello(*args):
    print args    
hello(*gen)

# but this does not work
[] + gen
TypeError: can only concatenate list (not "generator") to list

问题答案:

3.5PEP 448中 所述,已在Python中添加了对列表,字典,集合和元组文字进行解包的功能:

Python 3.5.0 (v3.5.0:374f501f4567, Sep 13 2015, 02:27:37) on Windows (64 bits).

>>> [1, 2, 3, *[4, 5, 6]]
[1, 2, 3, 4, 5, 6]

以下是此更改背后原因的一些解释。请注意,这并不*[1, 2, 3]等同1, 2, 3于所有情况。Python的语法不适合这种方式。



 类似资料:
  • 问题内容: 我经常使用Python的语句来显示数据。是的,我知道方法,方法和方法。我也知道splat运算符()可用于将Iterable扩展为函数参数。但是,我似乎无法通过声明来做到这一点。使用清单: 使用元组: 我想念什么吗?这根本不可能吗?接下来到底是什么?该文档说该关键字后面是逗号分隔的表达式列表,但是我想这与列表数据类型不同。我在SO和Web上做了很多挖掘工作,却没有找到明确的解释。 我正在

  • 使用表达式 例5.1 使用表达式 #!/usr/bin/python # Filename: expression.py length =5 breadth =2 area = length * breadth print'Area is', area print'Perimeter is', 2* (length + breadth) (源文件:code/expression.py) 输出 $

  • 我们将简单浏览一下运算符和它们的用法: 技巧 你可以交互地使用解释器来计算例子中给出的表达式。例如,为了测试表达式2 + 3,使用交互式的带提示符的Python解释器: >>> 2 + 3 5 >>> 3 * 5 15 >>> 表5.1 运算符与它们的用法 运算符 名称 说明 例子 + 加 两个对象相加 3 + 5得到8。'a' + 'b'得到'ab'。 - 减 得到负数或是一个数减去另一个数 -

  • 考虑以下片段: 在\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\一切工作完美,我得到打印出来的屏幕。 在中,我做了完全相同的操作,希望从参数包中读取。然而,我明白了 我做错了什么?人们会认为事情会完全一样,我只是替换了操作

  • 根据ISO/IEC 14882:2011,我们不能在三元运算符的第二个和第三个操作数中都使用throw表达式: 5.16条件运算符[expr.cond] 2 如果第二个或第三个操作数的类型为 void,则对第二个和第三个操作数执行左值到右值 (4.1)、数组到指针 (4.2) 和函数到指针 (4.3) 的标准转换,并且以下之一应成立: — 第二个或第三个操作数(但不是两个)是抛出表达式 (15.1

  • 你所编写的大多数语句(逻辑行)都包含了表达式(Expressions)。一个表达式的简单例子便是 2+3。表达式可以拆分成运算符(Operators)与操作数(Operands)。 运算符(Operators)是进行某些操作,并且可以用诸如 + 等符号或特殊关键词加以表达的功能。运算符需要一些数据来进行操作,这些数据就被称作操作数(Operands)。在上面的例子中 2 和 3 就是操作数。 运算