我想调用一个在单个变量内发送多个参数的函数。
换句话说,我想做Test(some_var)
的结果与示例中的x1
相同。
class Test:
def __init__(self, one, two=None):
self.one = one
if two is not None:
self.two = two
tup = 'a', 'b'
lst = ['a', 'b']
x1 = Test('a', 'b')
x2 = Test(tup)
x3 = Test(lst)
答案 0 :(得分:2)
您必须使用运算符*
解压缩参数:
Test(*tup)
顺便说一句,当您要按位置分配自变量时,将使用运算符*
。如果要按名称分配自变量,则可以将运算符**
与字典一起使用:
def foo(a, b):
print(a, b)
kwargs = {'b': 20, 'a': 0}
foo(**kwargs) # 0 20
答案 1 :(得分:2)
您可以使用*
运算符对元组或列表进行解压缩:
class Test:
def __init__(self, one, two=None):
self.one = one
if two is not None:
self.two = two
tup = 'a', 'b'
lst = ['a', 'b']
x1 = Test('a', 'b')
x2 = Test(*tup) # unpack with *
x3 = Test(*lst) # unpack with *
print(vars(x1) == vars(x2) == vars(x3)) # True
如果您有关键字参数和dict
,还可以用两个*
来解开字典:
class Test:
def __init__(self, one=None, two=None):
self.one = one
if two is not None:
self.two = two
kwargs = {'one': 'a', 'two': 'b'}
x1 = Test('a', 'b')
x2 = Test(**kwargs)
print(vars(x1) == vars(x2)) # True
请参见here。
解包运算符非常通用,不仅用于函数参数。例如:
>>> [*range(4), 4]
[0, 1, 2, 3, 4]
>>> {'x': 1, **{'y': 2}}
{'x': 1, 'y': 2}