record= ('ACME', 50, 123.45, (12, 18, 2012))
name, *_, (*_, year) = record
print(name)
>>>'ACME'
print (year)
>>> 2012
print (*_)
>>> 12 18
所以我开始阅读有关解包元组,列表和词典的内容。它说
有时你可能想要解压缩值并扔掉它们。解包时不能只指定裸*,但可以使用常见的一次性变量名,例如_或ign(忽略)
我不太明白,所以我试图通过在pythontutor.com上可视化我的代码来理解,但它并没有真正“丢弃”分配给* _的值,我也无法访问数据“50,123.45”。我刚刚开始,所以请耐心等待我,因为我很难理解这一点。
“使用常见的一次性变量名称”是线索。 *_
正在拆包(*
)成为一个名为_
的变量。使_
“一次性”的唯一因素是它通常被忽略。但是,如果你不忽视它,它将不是一次性的!
如果要解压缩多个部分,并且仍然可以单独访问它们,请使用不同的变量名称。你的例子:
>>> record= ('ACME', 50, 123.45, (12, 18, 2012))
>>> name, *_, (*_, year) = record
>>> print(name,year,*_)
ACME 2012 12 18
分配变量_
两次,因此后来分配的数据12,18
会覆盖先前分配的数据50,123.45
。相比之下,请考虑:
>>> name, *_a, (*_b, year) = record
>>> print(*_a)
50 123.45 <-- the data you mentioned
>>> print(*_b)
12 18
在此示例中,_a
和_b
是包含单独内容的单独变量。分配
name, *_a, (*_b, year) = record
与...完全相同
name, *extra1, (*extra2, year) = record
但名字不同。再一次,没有任何关于_
本身是神奇的。