我在python中有一个类,它允许我保存一个函数(在数据库中)供以后使用。现在我需要在类中有一个方法,允许我在一些参数上调用这个函数。由于我不知道该函数提前有多少个参数,我必须将它们作为列表传递。这是事情崩溃的地方,因为我找不到任何方法来让参数从元组中获取参数。在LISP中这很容易,因为有一个关键字(只有一个字符)'@'就是为了这个目的:
(defmacro (call function arguments)
`(,function ,@args))
python是否这样做,我只是错过了它? 如果没有,有没有人有创造性的解决方案?
答案 0 :(得分:12)
Python使用*进行参数扩展。如果需要关键字参数,请使用**展开dict。所以你展示的宏将是:
def call(function, args):
return function(*args)
但通常Pythonic的方法是直接进行内联调用。实际上有一个名为apply()的函数正是这样做的,但它已被弃用,因为内联方式通常更清晰。
答案 1 :(得分:4)
不,python不会遗漏这个。 SaltyCrane比我更好地解释了* args和** kwargs的使用。