这个问题源于^{2.x
)。具体而言,在缺点一节中,注意到以下几点:
Whilst
*elements, = iterable
causeselements
to be alist
,elements = *iterable
, causeselements
to be atuple
. The reason for this may confuse people unfamiliar with the construct.
对于iterable = [1, 2, 3, 4]
,第一种情况下产生list
:
>>> *elements, = iterable
>>> elements
[1, 2, 3, 4]
对于第二种情况,将创建tuple
:
由于不熟悉这个概念,我很困惑。有人能解释这种行为吗?带星号的表情是否因其所在的侧面而有所不同?在
这两种情况的区别在考虑扩展解包的初始PEP时得到了解释:^{} 。在
在政治公众人物的摘要中,我们可以看到:
(重点是我的)
所以在第一种情况下,在执行之后:
elements
始终是一个list
,包含{尽管这两种情况看起来很相似,但在本例中的}do类似。在
^{pr2}$*
表示:捕捉所有未分配给名称的内容并将其分配给带星号的表达式。它的工作方式与函数定义中的*args
和{第二种情况(右侧)有些不同。在这里,
*
不像通常在函数调用中那样以“捕捉一切”的方式工作。它扩展了它所附加的iterable的内容。所以,声明:可以看作:
这是初始化
tuple
的另一种方法。在请注意,}中,并得到形式为
list
可以通过简单的使用elements = [*iterable]
来创建,它将把iterable
的内容解压到{elements = [1, 2, 3, 4]
的赋值。在相关问题 更多 >
编程相关推荐