假设有以下外部模块,其拼写如下:
module1.py
X = [1,2,3]
def test_func(keyword_list=X):
return keyword_list
test_func()
在另一个文件中,我正在尝试将另一个项目添加到kwarg X
,在那里我正在打电话,这将是:
my_file.py
from module1 import test_func
test_func()
...
在我对test_func
的初始调用中,有没有简单的方法向我的kwarg添加额外的列表项。我在技术上知道我可以这样:
from module1 import test_func, X
test_func(keyword_list=X + [4])
[1,2,3,4]
无论如何直接从X
module1.py
来执行此操作
修改 module1.py
是一个我无法直接更改的开源模块。
答案 0 :(得分:1)
使用其他关键字arg:
def test_func(keyword_list=[1,2,3,4], additional_list=[]):
return keyword_list + additional_list
print(test_func())
print(test_func(additional_list=[5]))
应该产生
[1, 2, 3, 4]
[1, 2, 3, 4, 5]
或使用包装函数:
def wrapper_test_func(additional_list=[]):
return test_func(module1.X + additional_list)
答案 1 :(得分:0)
启用该方案的一种方法似乎是让你的test_func api采用两个列表......
def test_func(user_keywords=None, default_keywords=X):
# merge them
# more stuff...
我确信有方法可以反映方法并使用inspect
模块和inspect.getargspec
等方法获取默认参数,但这似乎是一个麻烦,可以通过适应预期用途来避免首先是方法签名中的案例。