Python:将函数和参数分配给变量

Python:将函数和参数分配给变量,python,Python,我的问题是,如果“test”具有不同数量的参数,这取决于场景,“func”如何知道要传递的参数数量以及这些参数的名称 对不起,如果我不清楚的话。这将更清楚地描述这一情景 我有一个函数调度器 def test(name): print "name:", name func = test func("testing") # it works, as I know that the function test accepts one parameter. 现在,每当用户在执行脚本时发送选项

我的问题是,如果“test”具有不同数量的参数,这取决于场景,“func”如何知道要传递的参数数量以及这些参数的名称

对不起,如果我不清楚的话。这将更清楚地描述这一情景

我有一个函数调度器

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

func = test
func("testing") # it works, as I know that the function test accepts one parameter.
现在,每当用户在执行脚本时发送选项时,我想包装一个函数。我将上述代码更改为:

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)

在说了
func=test
之后,
func
就变成了
test
的另一个名字。因此,调用
func
的方式与调用
test
的方式完全相同,如果给
func
错误的参数数,您将得到
TypeError
,就好像调用了
test
一样

有关其他语言中的变量与Python中的名称之间差异的更多信息,请参阅。


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

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.
将提供:

import inspect
inspect.getargspec(func).args

是的,如果给函数指定默认值,有一种方法

['name']
如果“test”接受可变数量的参数并将其分配给 “func”。我想知道“func”有多少个参数。 内省(dir(func))不会显示“func”包含多少个参数 我可以接受

func
不是函数。它只是一个别名,指向名为
test
的函数。因此,
func
无法接受与
test
不同数量的参数,因为
func
不是函数,只是指向函数的名称。您可以验证这一点:

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

func = test
func("testing")
func("testing",6) 
func(0)

你需要给出更多关于你想做什么的细节。在不知道接受什么参数的情况下调用“神秘函数”是没有意义的。即使您可以通过编程方式计算出需要多少个参数以及它们的名称,在不阅读文档和不知道它们的作用的情况下,您如何决定为它们传递哪些值?您编辑的问题仍然没有真正解释您希望如何使用包装函数。您知道什么是
exec\u test1()
exec\u Do\u test(testcase\u obj)
返回的吗?如果您这样做,那么您就知道在每种情况下
func
将是什么,以及在每种情况下要传递多少个参数。如果您不知道,知道它们有多少个参数对您没有帮助,因为您仍然不知道可以为这些参数传递哪些有意义的值。如果“test”接受可变数量的参数并将其分配给“func”。我想知道“func”有多少个参数。内省(dir(func))不会显示“func”可以接受多少个参数。
dir(test)
也不会告诉您。记住,它们是同一事物的名称。您可能需要
help(func)
func
test
是绝对等效的。两者都是指向函数的名称。所以
func
没有什么特别之处。谢谢你的回答。是否可以将“test”及其签名“arg1”分配给“func”?因此,如果我调用func(),它应该转换为调用测试(arg1)
>>> 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']