【发布时间】:2014-02-03 12:35:55
【问题描述】:
我正在开发一个包含子包和每个子包中的多个模块的包。 大多数函数需要在“主”函数中启动的几个参数(~10)。通常,所有参数都传递给从函数内部调用的方法。传递这些参数的最佳方式是什么?
考虑以下场景:
def func(arg1, arg2, ...., argn):
do something
ext_method(arg1, arg3,...argk) # Note: all the arguments are not passed to ext_method
cleanup
PS:函数嵌套可以很深(比如从 main 函数开始大约 10-12 个函数)。 我考虑了两种选择:
-
检查方法:用所有参数构造主函数中所有参数的字典。调用函数:使用 inspect 包中的方法获取其 argspec,并从“全局”参数字典中过滤掉不必要的参数。它看起来像下面的 sn-p。
args = {arg1: obj1, arg2:obj2,...} req_args = dict([(k, v) for k, v in args.items() if k in inspect.getargspec(ext_method).args]) -
键值方法:
ext_method()使用参数键值对调用ext_method(arg1=val1, arg3=val3,...,argk=valk)
我发现第二种方法无效,因为随着更多功能添加到包中,更改ext_method() 的签名并不容易。方法 1 是不是更好的选择?
【问题讨论】:
-
如果您有许多共享状态的函数,使用类可能是一个不错的解决方案。