python调用函数只有必要的参数?

时间:2013-11-25 08:15:27

标签: python

说我有一个功能:

def omni(self, func, *args, **kwargs):

总是调用func

但是,func的参数可以是任何组合。例如

def func(self):
    # omni should only pass in self

def func():
    # omni should pass in nothing

def func(foo, key='foo'):
    # omni should pass in a foo param and a key if supplied one

def func(*args, **kwargs):
    # omni should pass in everything

有没有办法从func只传递omni所需的参数?即上述可能吗?

离。

def foo(m):
    pass

obj.omni(foo, m, a=1)
# this should call
foo(m)

def foo(self, **kwargs):
    pass

obj.omni(foo, m, 1, b=2)
# this should call
foo(self, b=2)

2 个答案:

答案 0 :(得分:0)

def omni(self=None, func=None, *args=None, **kwargs=None)

您应该使用上面的可选参数。请看这里http://www.diveintopython.net/power_of_introspection/optional_arguments.html

答案 1 :(得分:0)

这听起来很复杂。

您必须检查func,并且对于func是对象的情况,func.__call__也是如此。

真实函数有func_defaultsfunc_code,后者又有co_argcountco_flags

在他们的帮助下,你可以检查

  • 功能有多少参数
  • 其中有多少人有默认值
  • 如果允许*args / **kwargs