说,
我有一个python函数如下:
def ooxx(**kwargs):
doSomething()
for something in cool:
yield something
我想提供另一个带有提示的命名参数的函数,如下所示:
def asdf(arg1, arg2, arg3=1):
frame = inspect.currentframe()
args, _, _, values = inspect.getargvalues(frame)
kwargs = dict((key, values[key]) for key in args) # convert args list into dictionary form
return list(ooxx(**kwargs))
是否可以使用某种方法自动生成“asdf”功能?我有很多动态生成的ooxx函数,我希望有相应的asdf函数和自定义的命名参数。不确定这是正确的要求还是正确的编码方式:p
答案 0 :(得分:4)
你的描述对我来说没有意义:你写了一个非常冗长的函数来做到这一点:
def asdf(arg1, arg2, arg3=1):
return list(ooxx(**locals()))
但你想检查ooxx
并以某种方式为asdf
的参数组成适当的名字?这是不可能的,ooxx
上没有关于此的信息。
如果您实际拥有签名并希望从中创建一个函数,则必须求助于eval
或生成Python文件的函数定义并导入它。
还有decorator模块。您可以使用它创建一个函数:
import decorator
asdf = decorator.FunctionMaker.create(
'asdf(arg1, arg2, arg3)', # signature
'return ooxx(**locals())', # function body
{'ooxx' : ooxx}, # context for the function
('arg3', 1)) # default arguments