这是python中缺少的基本功能编程功能吗?

时间:2009-12-30 08:02:48

标签: python

我在python中有一个类,它允许我保存一个函数(在数据库中)供以后使用。现在我需要在类中有一个方法,允许我在一些参数上调用这个函数。由于我不知道该函数提前有多少个参数,我必须将它们作为列表传递。这是事情崩溃的地方,因为我找不到任何方法来让参数从元组中获取参数。在LISP中这很容易,因为有一个关键字(只有一个字符)'@'就是为了这个目的:

(defmacro (call function arguments)
 `(,function ,@args))

python是否这样做,我只是错过了它? 如果没有,有没有人有创造性的解决方案?

2 个答案:

答案 0 :(得分:12)

Python使用*进行参数扩展。如果需要关键字参数,请使用**展开dict。所以你展示的宏将是:

def call(function, args):
    return function(*args)

但通常Pythonic的方法是直接进行内联调用。实际上有一个名为apply()的函数正是这样做的,但它已被弃用,因为内联方式通常更清晰。

答案 1 :(得分:4)

不,python不会遗漏这个。 SaltyCrane比我更好地解释了* args和** kwargs的使用。