Python魔术*或**方法等效

时间:2015-02-23 12:17:12

标签: python python-2.7

是否存在等同于***魔法的python方法?

所以,我的意思是代替:

a = (1,2,3)
method(*a)

取而代之的是:

a = (1,2,3)
method(remove_magic(a))

在阅读代码时,我会看到***,并希望有更好的可读方式。我希望python标准库中有一些东西能为我做这件事。

2 个答案:

答案 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)