2009-07-24 8 views
4

Mögliche Duplizieren:
What does *args and **kwargs mean?In Python bei der Übergabe von Argumenten was tut ** vor einem Argument?

aus diesem Beispiel zu lesen und von meinem schlanken Wissen über Python muss es eine Abkürzung sein für ein Array zu einem Wörterbuch oder etwas umzuwandeln?

class hello: 
    def GET(self, name): 
     return render.hello(name=name) 
     # Another way: 
     #return render.hello(**locals()) 
+0

genau duplizieren http://stackoverflow.com/questions/287085/what-does-args-and-kwargs-mean – SilentGhost

+1

Eigentlich ist das nicht wirklich ein Duplikat. Diese Frage stellt sich die Frage, was das Aufrufen einer Funktion mit 'f (** d)' bedeutet, während die andere Frage mehr auf '*' und '**' in Funktionsparameterdefinitionen zu stehen scheint. – sth

Antwort

1

Es "entpackt" ein Wörterbuch als Argumentliste. dh:

def somefunction(keyword1, anotherkeyword): 
    pass 

als

somefunction(keyword1=something, anotherkeyword=something) 
or as 
di = {'keyword1' : 'something', anotherkeyword : 'something'} 
somefunction(**di) 
11

In Python genannt werden könnte f(**d) übergibt die Werte in dem Wörterbuch d als Keyword-Parameter an die Funktion f. In ähnlicher Weise übergibt f(*a) die Werte aus dem Array a als Positionsparameter.

Als Beispiel:

def f(count, msg): 
    for i in range(count): 
    print msg 

Aufruf dieser Funktion mit **d oder *a:

>>> d = {'count': 2, 'msg': "abc"} 
>>> f(**d) 
abc 
abc 
>>> a = [1, "xyz"] 
>>> f(*a) 
xyz 
1

Vom Python docuemntation, 5.3.4:

Wenn eine Keyword-Argument entspricht nicht einer formalen Parametername wird eine TypeError-Exception ausgelöst, es sei denn, ein formaler p Parameter unter Verwendung der Syntax ** Bezeichner ist vorhanden; In diesem Fall erhält dieser formale Parameter ein Dictionary, das die überflüssigen Schlüsselwortargumente enthält (die Schlüsselwörter als Schlüssel und die Argumentwerte als entsprechende Werte verwenden) oder ein (neues) leeres Dictionary, wenn keine überzähligen Schlüsselwortargumente vorhanden sind.

Dies wird auch für the power operator, in einem anderen Kontext verwendet.

1

** local() übergibt das Wörterbuch, das dem lokalen Namespace des Aufrufers entspricht. Wenn Sie eine Funktion mit ** übergeben, die ein Wörterbuch enthält, können Argumentlisten mit variabler Länge verwendet werden.

Verwandte Themen