【原文】
4.8.5. Unpacking Argument Lists
The reverse situation occurs when the arguments are already in a list or tuple but need to be unpacked for a function call requiring separate positional arguments. For instance, the built-in range()
function expects separate start and stop arguments. If they are not available separately, write the function call with the *
-operator to unpack the arguments out of a list or tuple:
>>>
>>> list(range(3, 6)) # normal call with separate arguments [3, 4, 5] >>> args = [3, 6] >>> list(range(*args)) # call with arguments unpacked from a list [3, 4, 5]
In the same fashion, dictionaries can deliver keyword arguments with the **
-operator:
>>>
>>> def parrot(voltage, state='a stiff', action='voom'): ... print("-- This parrot wouldn't", action, end=' ') ... print("if you put", voltage, "volts through it.", end=' ') ... print("E's", state, "!") ... >>> d = {"voltage": "four million", "state": "bleedin' demised", "action": "VOOM"} >>> parrot(**d) -- This parrot wouldn't VOOM if you put four million volts through it. E's bleedin' demised !
【译】
4.8.5.解包参数列表
有时情况相反,函数调用时需要分离的位置参数已经存在于列表或元组中时,要先解包列表或元组。比如,内置函数range()需要分离从起始到终止的参数,如果它们不能分离,请使用*运算符写函数调用,解包列表或元组后得到参数。
同样的,字典能够用**-operator分离关键字参数。
拓展一:未解包列表,range()函数不能被调用。
拓展二:解包列表,将解包后的值作为参数传递给range()函数。
拓展三:解包元组。