0
def test(name):
    print "name:", name

func = test
func("testing") # it works, as I know that the function test accepts one parameter.

我的问题是,如果“测试”具有不同数量的参数,具体取决于场景以及“func”如何知道要传递多少个参数以及这些参数名称是什么。

对不起,如果我不清楚。这将提供更清晰的场景图。

我有一个函数调度程序。

testcase_obj  = testcase() # A object of a class    
if command.startswith("test1"):    
    output = exec_test1()    
elif command.startswith("do_test"):    
    output = exec_do_test(testcase_obj)

现在,每当用户在执行脚本时发送选项时,我想包装一个函数。我将上面的代码更改为:

testcase_obj  = testcase() # A object of a class    
if command.startswith("test1"):    
    func = exec_test1() # Mistake, this should be func = exec_test1
elif command.startswith("do_test"):    
    func = exec_do_test(testcase_obj) # I don't know how assign exec_do_test along
                                      # with its parameter to 'func'. I don't want to
                                      # to call exec_to_test.

if option_given:    
    func = wrapper_func(func)    
    output = func() # At this point I don't how many parameters that "func" takes.
4

5 回答 5

5

说完func = testfunc就变成了别称test。因此,您调用func的方式与 完全相同test,如果您提供func错误数量的参数,您将得到 a TypeError,就好像您调用test不正确一样。

有关其他语言中的变量和 Python 中的名称之间的区别的更多信息,请参阅像 Pythonista 一样的代码

于 2012-10-23T06:19:32.253 回答
3

试试这个inspect模块

import inspect
inspect.getargspec(func).args

会给:

['name']
于 2012-10-23T06:32:59.227 回答
1

它会是一样的。

func 只是 test 的别名,而不是调用 test 的函数

于 2012-10-23T06:19:36.533 回答
1

如果“test”采用可变数量的参数并将其分配给“func”。我想知道“func”有多少个参数。Introspection(dir(func)) 不会显示“func”可以接受多少个参数。

func不是函数。它只是一个指向被调用函数的别名test。所以没有办法func可以接受不同数量的参数,test因为func is 不是一个函数,只是一个指向一个的名称。您可以验证这一点:

>>> def test(arg1):
...    print 'test was given ',arg1
...
>>> func = test
>>> test.func_name
'test'
>>> func.func_name
'test'
>>> id(func)
3075004876L
>>> id(test)
3075004876L
>>> inspect.getargspec(func).args
['arg1']
>>> inspect.getargspec(test).args
['arg1']
于 2012-10-23T07:02:13.233 回答
0

是的,如果您为函数提供默认值,那么有一种方法。

def test(name="default",hi=0):
    print "name:", name,hi

func = test
func("testing")
func("testing",6) 
func(0)
于 2012-10-23T06:39:20.160 回答