2016-10-02 16 views
0

Предположим, что имеется следующий внешний модуль и его прописано так:добавить дополнительную ценность kwarg списку

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() 
... 

Есть ли какой-либо краткий способ добавления дополнительного элемента списка в мой kwarg при моем первоначальном звонке до test_func. Я знаю, что технически я мог что-то вроде следующего:

from module1 import test_func, X 

test_func(keyword_list=X + [4]) 

[1,2,3,4] 

Есть в любом случае сделать это без импорта X непосредственно из module1.py?

Редактироватьmodule1.py - модуль с открытым кодом, который я не могу изменить напрямую.

+0

Почему вы даже хотите сделать это? Я имею в виду, вы хотите использовать значение по умолчанию для функции, добавить что-то к ней, а затем вызвать ее снова? Как и не знаете, как выглядит значение по умолчанию, верно? Поэтому я думаю, что это было бы странное поведение. Может быть, если бы вы могли дать мне более разумный пример, я был бы в состоянии помочь вам, но сейчас я не уверен, чего вы пытаетесь достичь этим. – Nf4r

ответ

0

Кажется, один из способов, чтобы включить сценарий будет иметь ваш test_func апи взять два списка ...

def test_func(user_keywords=None, default_keywords=X): 
    # merge them 
    # more stuff... 

Я уверен, что есть способы, чтобы отразить более метод и получить арг по умолчанию с помощью inspect модуль и методы, такие как inspect.getargspec, но это похоже на хлопот, которого можно избежать, в первую очередь, путем размещения предполагаемых случаев использования в сигнатуре метода.

+0

Если вы не можете изменить test_func, посмотрите на модуль проверки, чтобы найти значения по умолчанию arg arg. –

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) 
+0

'test_func' происходит из открытого модуля, который я не могу напрямую переписать. – jimmyguestnow

+0

см. Изменения в моем ответе - используйте функцию обертки, чтобы у вас не было не элегантных вещей при каждом вызове –

Смежные вопросы