2016-10-02 2 views
0

Angenommen, es gibt die folgenden externen Modul und dessen wie folgt buchstabiert:einen zusätzlichen Mehrwert Liste kwarg

module1.py

X = [1,2,3] 

def test_func(keyword_list=X): 
    return keyword_list 

test_func() 

In einer anderen Datei Ich versuche, ein anderes Element hinzufügen zu die kwarg X wo krank meinen Anruf, und das wird hier sein:

my_file.py

from module1 import test_func 

test_func() 
... 

Gibt es eine Möglichkeit, einen zusätzlichen Listeneintrag zu meinem Kwarg in meinem ersten Anruf zu test_func hinzuzufügen. Ich weiß, technisch konnte ich etwas wie folgt aus:

from module1 import test_func, X 

test_func(keyword_list=X + [4]) 

[1,2,3,4] 

Gibt es trotzdem, dies zu tun, ohne X direkt von module1.py zu importieren?

Bearbeitenmodule1.py ist ein Open-Source-Modul, das ich nicht direkt ändern kann.

+0

Warum würden Sie sogar das tun wollen? Ich meine, Sie möchten den Standardwert der Funktion verwenden, etwas hinzufügen und dann erneut aufrufen? Wie Sie nicht wissen, wie der Standardwert aussieht, oder? Ich denke, das wäre ein seltsames Verhalten. Vielleicht könntest du mir, wenn du mir ein vernünftigeres Beispiel geben könntest, helfen, aber momentan bin ich mir nicht sicher, was du damit erreichen willst. – Nf4r

Antwort

0

Es scheint einen Weg, um das Szenario zu aktivieren wäre Ihr test_func api zwei Listen nehmen zu haben ...

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

Ich bin sicher, es gibt Möglichkeiten, um die Methode zu reflektieren über und erhalten den Standard args die Verwendung von inspect Modul und Methoden wie inspect.getargspec aber das scheint wie ein Ärger, der vermieden werden kann, indem beabsichtigte Anwendungsfälle in der Methodensignatur an erster Stelle.

+0

Wenn Sie test_func nicht ändern können, sehen Sie sich das inspect-Modul an, um nach Arg-Standardwerten zu suchen. –

1

ein anderes Stichwort arg Verwendung:

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])) 

Sollte produzieren

[1, 2, 3, 4] 
[1, 2, 3, 4, 5] 

Oder eine Wrapper-Funktion verwenden:

def wrapper_test_func(additional_list=[]): 
    return test_func(module1.X + additional_list) 
+0

'test_func' kommt von einem öffentlichen Modul, das ich nicht direkt umschreiben kann. – jimmyguestnow

+0

sehen Sie die Änderungen in meiner Antwort - verwenden Sie eine Wrapper-Funktion, so dass Sie nicht bei jedem Anruf zu nicht-eleganten Sachen haben –

Verwandte Themen