2016-04-27 1 views
-2

Die Widerlegungen in this thread ergeben für mich überhaupt keinen Sinn. Kann es jemand kaputt machen? Analogien herstellen? Warum ist das ein "missbräuchlicher Hack"?Warum ist es schlecht, Wörterbücher mit x = dict (x, ** y) anzuhängen?

+1

Bitte erläutern Sie die Teile, die Sie nicht verstehen. Zum Beispiel scheint mir das klar zu sein: "Auch das schlägt in Python 3 fehl, wenn Schlüssel keine Zeichenfolgen sind." Und Guidos Aussage: "Es geht mir gut,' dict ({}, ** {1: 3}}} illegal zu deklarieren, denn schließlich ist es der Missbrauch des '**' Mechanismus. " –

+0

Es kann in Python 3 fehlschlagen, daher sollte es entmutigt werden und es ist nicht so lesbar wie andere Alternativen. Welcher Teil ist nicht klar? – Cyb3rFly3r

+0

Guido mag es nicht, und es macht Ihren Code nicht tragbar. Wenn Sie sich nicht für beide interessieren, verrückt werden? Es gibt keine objektive Möglichkeit, diese Frage zu beantworten. Sie fragen im Wesentlichen nach unseren Meinungen, die hier nicht behandelt werden. – roippi

Antwort

3
dict(x, **foo) 

... foo = { 'hello': 'world' } gegeben, geschieht Folgendes:

dict(x, hello=world) 

Diese relativ einfach ist - aber kwargs Verhalten für Schlüssel nur gut definiert ist, die tatsächlich als Schlüsselwort weitergegeben werden konnten Argumente in (allen verfügbaren Versionen von) Python. Betrachten Sie so etwas wie:

foo = { ('some', 'tuple'): 'value' } 

... in dem Fall, dass Sie einen Schlüssel haben, die eigentlich nicht als Schlüsselwort-Argument übergeben werden könnten; **foo zu bestehen wäre, ein Verhalten auszuüben, das für Leser nicht intuitiv definiert ist und das einige Versionen von Python (wie Python 3) explizit ablehnen.


dagegen:

x = dict(x) # create a new object 
x.update(y) 

... setzt nur auf wohldefinierte Verhalten und ist tragbar geht nach vorn.

Verwandte Themen