如何让python函数传递的变量多于定义中接受的变量?

时间:2016-09-22 17:43:02

标签: python python-2.7

我有一个非常通用的函数调用,看起来像

result = getattr(class_name, func_name)(result)

此函数调用更新result。这个函数调用非常通用,因此它可以调用来自不同类的许多函数。目前,所有这些函数只接受一个参数result。但是,它并不适用于某些函数需要传递的内容超过result但更多参数(例如args)的情况。

Python(2.7)中是否有一种方法允许这个泛型函数调用传递args但是仍然调用不具有额外参数的函数?如果没有,那么解决这个问题的更好方法是什么?

编辑:我无法更改现有的函数定义,包括仅仅使用参数result的函数定义。我只能改变这一行:

result = getattr(class_name, func_name)(result)

2 个答案:

答案 0 :(得分:1)

您可以在函数调用中添加*。这会将result作为多个参数传递。假设您有两个功能:

class YourClass:
   def my_first_def(one_arg):
      return (1, 2)

   def my_second_def(one_arg, second_arg):
      return (1, 2, 3)


if not instanceof(result, tuple):
  result = (result,)

result = getattr(YourClass, 'my_first_def')(*result)
result = getattr(YourClass, 'my_second_def')(*result)

请注意result必须是tuple

答案 1 :(得分:0)

对此的一般解决方案是,当我们想要提供诸如此类的通用函数名称时,每个类都有责任实现其对该函数的本地定义。这就是为什么你在许多不同的类中看到一个方法 __ init __ 。系统标准化名称,将要求放在类上。

另一种常见的方法是从 C 借用:你传递一个参数列表,规范的* args解决方案。这允许一个通用的,灵活的函数适当地解释arglist。