【发布时间】:2021-03-20 20:33:37
【问题描述】:
我正在编写的一个包正在不断扩展,但是很多函数都采用相同的参数(例如 overwrite=True 之类的东西)。我正在考虑通过全局设置默认参数来减少一些冗余的方法。我尝试过使用装饰器(这就是它们的用途,对吗?[seen here])
所以,而不是
def function1(unique_arg1=1, unique_arg2=2, overwrite=True, feedback=False):
print(locals())
pass
function1()
我尝试过类似的方法
## define in settings.py
default_args_dict = {
"overwrite": True,
"feedback": False}
def add_defaults(func):
def inner(default_args=default_args_dict):
return func(**default_args)
return inner
## script.py
from settings import add_defaults
@add_defaults
def function1(unique_arg1=1, unique_arg2=1, **kwargs):
print(locals())
pass
function1()
不幸的是,传递可选参数不再起作用:
## doesn't work
function1(overwrite=False)
TypeError: inner() got an unexpected keyword argument 'overwrite'
有人可以帮我吗?而且,更重要的是,这是一个糟糕的主意吗?
【问题讨论】:
-
也许将参数放入一个对象中,并为该对象提供一个提供默认值的构造函数?
标签: python