在Python中是否可以将函数调用拆分为函数及其参数列表?例如,取func(1,4,True)
并将其转换为[func, 1, 4, True]
或类似内容。理想情况下,我想为任意函数执行此操作。
我对如何实现相同的最终结果有一些其他想法(例如以文本形式阅读代码或将学生代码复制到具有不同func
定义的新文件),但是与重新定义比较函数相比,两者都会涉及更多的工作并且有更多的潜在问题。
答案 0 :(得分:3)
您问题的直接答案是否,因为函数调用不是对象,而是声明。
要获取有关任何函数的信息,例如其名称,参数等,您可以使用附加到每个函数的一些属性和方法:
>>> def foo(a,b):
... print a,b
...
>>> foo.func_name
'foo'
>>> foo.func_code.co_varnames
('a', 'b')
键入dir(funcname)
会为您提供更多可供探索的内容。
如果您想知道函数的工作方式,调用时如何分配参数,以及其他此类调查疑难解答,还有inspect
module。
答案 1 :(得分:2)
如何定义装饰器:
def func_call_decorator(func):
def _wrapper(*args, **kwargs):
ret = func(*args, **kwargs)
return [func]+list(args)+kwargs.items() + [ret]
return _wrapper
@func_call_decorator
def foo(a,b):
return a+b
print foo(2,3)
产生:
[<function foo at 0x10045f5f0>, 2, 3, 5]
我还将给定参数的函数的返回值附加为列表的最后一个元素。
我想知道你的用例是什么......
答案 2 :(得分:1)
call = [func, 1, 4, True]
f,args = call[0],call[1:]
result = f(*args)