Python:将函数和参数分配给变量
我的问题是,如果“test”具有不同数量的参数,这取决于场景,“func”如何知道要传递的参数数量以及这些参数的名称 对不起,如果我不清楚的话。这将更清楚地描述这一情景 我有一个函数调度器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. 现在,每当用户在执行脚本时发送选项
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']