Warum ist es möglich, zu ersetzen, manchmal() mit {}?
In PyCharm, wenn ich Schreibe:
return set([(sy + ady, sx + adx)])
er sagt " - Funktion aufrufen, können ersetzt werden, mit der set-literal" so ersetzt es mit:
return {(sy + ady, sx + adx)}
Warum ist das so? Ein set()
in Python ist nicht das gleiche wie ein Wörterbuch {}
?
Und wenn es optimieren will, warum ist das effektiver?
- Beachten Sie, dass, trotz all Ihrer Titel, die Sie nicht ersetzen
set()
mit{}
, aber kann man ersetzen, eine nicht-leereset((1, 2, 3))
mit einer wörtlichen{1, 2, 3}
, denn jetzt ist es klar, das ist nicht ein Wörterbuch. Siehe docs.python.org/2/library/stdtypes.html#set-types-set-frozenset
Du musst angemeldet sein, um einen Kommentar abzugeben.
Python-sets und dictionaries können beide gebaut werden mit geschweiften Klammern:
my_dict = {'a': 1, 'b': 2}
my_set = {1, 2, 3}
Den interpreter (und den menschlichen Leser) unterscheiden kann zwischen Ihnen basierend auf deren Inhalt. Allerdings ist es nicht möglich zu unterscheiden zwischen einer leeren Menge und einer leeren dict, also in diesem Fall müssen Sie die Verwendung von
set()
für leere Sätze zu eindeutig machen.Einen sehr einfachen test deutet darauf hin, dass die wörtliche Bau ist schneller (Python ist3.5):
Diese Frage behandelt einige Probleme der Leistung von literal-Konstruktionen über vordefinierte Funktionen, wenn auch für Listen und dicts. Die Zusammenfassung scheint zu sein, dass wörtliche Konstruktionen erfordern weniger Aufwand für den interpreter.
timeit.timeit(stmt='a = set(mylist)', setup='mylist=[1, 2, 3]') -> 0.3987466390244663
- ich glaube, den link habe ich Hinzugefügt, deckt einige dieser.Es ist eine alternative syntax für
set()
dict
syntax ist anders. Es besteht aus Schlüssel-Wert-Paare. Zum Beispiel:Weiteres Beispiel, wie
set
und{}
sind nicht austauschbar (wie jonrsharpe erwähnt):set([iterable])
ist der Konstruktor zum erstellen einer Reihe von optionalen iterierbariterable
. Und{}
erstellen set /dict-Objekt-Literale. So was erstellt wird, hängt davon ab, wie Sie es verwenden.