inq*_*One 7 python tuples argument-unpacking python-3.x iterable-unpacking
考虑一个定义为的函数:
def fun(a, *args):
print(type(args), args)
Run Code Online (Sandbox Code Playgroud)
调用时,它将额外的位置参数打包为tuple。
>>> fun(2, 3, 4)
<class 'tuple'> (3, 4)
Run Code Online (Sandbox Code Playgroud)
我想在函数参数之外实现类似的事情。所以,我想我可以通过扩展的可迭代解包来实现同样的事情,但它总是将东西打包成一个列表,而不是一个元组:
# RHS is a tuple
>>> (a, *args) = (2, 3, 4)
>>> type(args)
<class 'list'>
>>> args
[3, 4] #but args is not a tuple!
Run Code Online (Sandbox Code Playgroud)
使它与:
# RHS is a list
>>> (a, *args) = [2, 3, 4]
>>> type(args)
<class 'list'>
>>> args
[3, 4]
Run Code Online (Sandbox Code Playgroud)
我可以理解这也是PEP 中提出的方式。
我在问是否有另一种方法来实现我想要的。
当然,我可以args
稍后通过以下方式转换为元组:
>>> args = tuple(args)
>>> args
(3, 4)
Run Code Online (Sandbox Code Playgroud)
如果这不能在分配期间直接实现。
我知道的最接近的方法(我承认,不能直接回答你的问题)就是对元组进行切片:
t = (2,3,4)
a, args = t[0], t[1:]
>>> type(args)
<class 'tuple'>
Run Code Online (Sandbox Code Playgroud)
是的,它很冗长,但至少它避免了中间列表。