我们正在考虑使用Python(IronPython,但我认为不相关)为另一个控制设备的应用程序提供一种"宏"支持.
我们想在Python中编写相当简单的函数,这些函数需要一些参数 - 这些函数可能是时间,温度和位置等.不同的函数将采用不同的参数,主应用程序将包含用户界面(类似于属性网格),允许用户为Python函数参数提供值.
因此,例如,function1可能需要一个时间和一个温度,而function2可能需要一个位置和几次.
我们希望能够从Python代码动态构建用户界面.容易做的事情是在模块中查找函数列表,并(使用inspect.getargspec)获取每个函数的参数列表.
然而,只是一个参数名称列表还不够 - 理想情况下我们希望能够包含关于每个参数的更多信息 - 例如,它是'类型'(高级类型 - 时间,温度等,而不是语言级别类型),也许是一个"友好名称"或描述.
所以,问题是,有什么好的'pythonic'方法可以将这种信息添加到函数中.
我想到的两种可能性是:
对参数使用严格的命名约定,然后从名称中推断出它们的内容(使用getargspec获取)
发明我们自己的docstring元语言(可能只是CSV)并使用docstring作为我们的元数据.
因为Python似乎非常流行用于构建大型应用程序的脚本,我想这是一个常见约定的解决问题,但我无法找到它们.
装饰器是向函数添加元数据的好方法.添加一个类型列表以附加到.params属性或其他内容:
def takes(*args):
def _takes(fcn):
fcn.params = args
return fcn
return _takes
@takes("time", "temp", "time")
def do_stuff(start_time, average_temp, stop_time):
pass
Run Code Online (Sandbox Code Playgroud)