*_ 和从 python 中任意长度的 Iterables 解包元素
*_ and Unpacking Elements from Iterables of Arbitrary Length in python
record= ('ACME', 50, 123.45, (12, 18, 2012))
name, *_, (*_, year) = record
print(name)
>>>'ACME'
print (year)
>>> 2012
print (*_)
>>> 12 18
所以我开始阅读有关拆包元组、列表和字典的内容。它说
Sometimes you might want to unpack values and throw them away. You
can’t just specify a bare * when unpacking, but you could use a common
throwaway variable name, such as _ or ign(ignored)
我不太明白,所以我试图通过在 pythontutor.com 上可视化我的代码来理解,但它并没有真正 "throwaway" 分配给 *_ 的值,我也无法理解访问数据“50, 123.45”。我才刚刚开始,所以请耐心等待,因为我很难理解这一点。
"Use a common throwaway variable name" 是线索。 *_
正在将 (*
) 解包到名为 _
的变量中。唯一使 _
"throwaway" 的是它通常被忽略。不过,你不理它,它就不会被扔掉!
如果你想解包多个部分,并且仍然能够分别访问它们,请使用不同的变量名。你的例子:
>>> 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
但名称不同。同样,_
本身并没有什么神奇之处。
record= ('ACME', 50, 123.45, (12, 18, 2012))
name, *_, (*_, year) = record
print(name)
>>>'ACME'
print (year)
>>> 2012
print (*_)
>>> 12 18
所以我开始阅读有关拆包元组、列表和字典的内容。它说
Sometimes you might want to unpack values and throw them away. You can’t just specify a bare * when unpacking, but you could use a common throwaway variable name, such as _ or ign(ignored)
我不太明白,所以我试图通过在 pythontutor.com 上可视化我的代码来理解,但它并没有真正 "throwaway" 分配给 *_ 的值,我也无法理解访问数据“50, 123.45”。我才刚刚开始,所以请耐心等待,因为我很难理解这一点。
"Use a common throwaway variable name" 是线索。 *_
正在将 (*
) 解包到名为 _
的变量中。唯一使 _
"throwaway" 的是它通常被忽略。不过,你不理它,它就不会被扔掉!
如果你想解包多个部分,并且仍然能够分别访问它们,请使用不同的变量名。你的例子:
>>> 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
但名称不同。同样,_
本身并没有什么神奇之处。