是否存在等同于*
和**
魔法的python方法?
所以,我的意思是代替:
a = (1,2,3)
method(*a)
取而代之的是:
a = (1,2,3)
method(remove_magic(a))
在阅读代码时,我会看到*
和**
,并希望有更好的可读方式。我希望python标准库中有一些东西能为我做这件事。
答案 0 :(得分:2)
从技术上讲,您可以使用内置apply()
功能。根据python文档:
apply()的使用等同于函数(* args,** keywords)。
所以你可以做apply(function, args, keywords=None)
。 (keywords
是可选的。)
除了非惯用且让经验丰富的程序员感到困惑之外,此功能has been deprecated 并且不应在新代码中使用:
从版本2.3开始不推荐使用:使用函数(* args,**关键字)而不是apply(函数,args,关键字)
答案 1 :(得分:0)
无法创建与*
或**
完全相同的功能。您必须自己修改method
。原因是remove_magic
函数最多可以返回一个元组/列表,但是你已经有一个:
a = (1,2,3)
method(remove_magic(a))
pythonic替代方法可能是解包元组并明确传递参数:
a = (1, 2, 3)
x, y, z = a
method(x, y, z)
在Python 2.x中,您可以使用apply
,但我发现它不太清晰。它在python 3中也不可用。
apply(method, a)
官方推荐是坚持
method(*a)