def test(name):
print "name:", name
func = test
func("testing") # it works, as I know that the function test accepts one parameter.
我的问题是,如果“test”具有不同数量的参数,具体取决于场景以及“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.
答案 0 :(得分:5)
在说出func = test
后,func
成为 test
的另一个名称。因此,您拨打func
的方式与test
完全相同,如果您给func
错误的参数数量,您将获得TypeError
,就好像您已拨打test
一样{1}}错误。
有关其他语言中的变量与Python中的名称之间差异的更多信息,请参阅Code like a Pythonista。
答案 1 :(得分:3)
尝试inspect
模块
import inspect
inspect.getargspec(func).args
会给:
['name']
答案 2 :(得分:1)
会是一样的。
func只是测试的别名,而不是调用测试的函数
答案 3 :(得分:1)
如果“test”采用可变数量的参数并将其分配给 “功能”。我想知道“func”有多少个论点。 内省(dir(func))不会显示“func”有多少个参数 可以。
func
不是一个功能。它只是一个指向名为test
的函数的别名。因此func
无法使用与test
不同的参数,因为func
不是函数,只是指向一个的名称。您可以验证这一点:
>>> 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']
答案 4 :(得分:0)
是的,如果你给你的功能提供默认值,有一种方法。
def test(name="default",hi=0):
print "name:", name,hi
func = test
func("testing")
func("testing",6)
func(0)