为kwarg list添加额外的值

时间:2016-10-02 22:33:19

标签: python

假设有以下外部模块,其拼写如下:

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是一个我无法直接更改的开源模块。

2 个答案:

答案 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等方法获取默认参数,但这似乎是一个麻烦,可以通过适应预期用途来避免首先是方法签名中的案例。