2014-06-09 13 views
5

Ich habe eine Keyword-Argument Funktion:Python Schlüsselwort Argumente mit Bindestrich

def f1(**kw): 
    for key,val in kw.iteritems(): 
     print "key=%s val=%s" % (key,val) 

f1(Attr1 = "Val1", Attr2 = "Val2") # works fine. 

f1(Attr1-SubAttr = "Val1", Attr2 = "Val2") # complains about keyword being an expression. 

f1("Attr1-SubAttr" = "Val1", Attr2 = "Val2") # doesn't work either. 

Wie gehe ich in den Schlüsselwort mit einem Bindestrich? Ich habe keine Kontrolle über diese Schlüsselwörter, da ich diese aus einer vorhandenen Legacy-Datenbank analysiere.

Danke! -kumar

+0

Sie nicht Schlüsselwörter mit einem Bindestrich haben. – wim

+0

ist gute Idee Version: http://StackOverflow.com/Questions/16956364/Function-Accepts-Keyword-Argumente-that-are-not-identifiers –

Antwort

12

Schlüsselwort Argumente muss sein valid Python identifiers; diese erlauben nicht - als reserviert für die Subtraktion.

Sie können in beliebigen Zeichenfolgen übergeben die **kwargs variable keyword argument syntax statt mit:

f1(**{"Attr1-SubAttr": "Val1", "Attr2": "Val2"}) 
+0

Danke, das hat funktioniert! – Kumar

+0

Du bist ein Rockstar, danke. –

+0

Nur einen Hinweis: verwendet dies auf Python Zeep, um ein SOAP , die einen Namen mit Bindestrich hatte übergeben. – epx