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“。我才刚刚开始,所以请多包涵,因为我很难理解这一点。
答案 0 :(得分:2)
“使用通用的一次性变量名称”是个线索。 <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
正在将(*_
)解压缩到名为*
的变量中。使_
被“抛弃”的唯一原因是通常将其忽略。但是,如果您不忽略它,那将不会是一掷千金!
如果要拆开多个包装,并且仍然能够分别访问它们,请使用不同的变量名称。您的示例:
_
两次分配变量>>> 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
本身没有什么神奇的东西。