Postskriptum 2019/12/11: In dem Kommentar haben Sie auf einen Fehler bei der Zeitmessung hingewiesen. Wir validieren derzeit mit dem richtigen Code.
TL;DR
--[]
Notation ist in der Ausführungszeit vorteilhafter
list ()
und []
unterscheidet.Python hat die Philosophie "Es sollte einen - und vorzugsweise nur einen - offensichtlichen Weg geben, dies zu tun.", Aber es gibt zwei Wege, eine Liste zu schreiben, die eine der am häufigsten verwendeten Datenstrukturen ist. Ist es gegen diese Philosophie? Gibt es einen Unterschied, der unterschiedliche Definitionen zulässt? Ich war besorgt.
StackOverflow hatte 2015 eine ähnliche Frage.
One's a function call, and one's a literal:
Nun, list ()
ist eine Funktion und []
ist ein Literal.
Nun, ich weiß nicht.
For the sake of completion, another thing to note is that list((a,b,c)) will return [a,b,c], whereas [(a,b,c)] will not unpack the tuple. This can be useful when you want to convert a tuple to a list. The reverse works too, tuple([a,b,c]) returns (a,b,c).
In der Tat ist das Verhalten für Taples anders. Zeigt dieser Unterschied im Verhalten, dass es sich um ein Literal mit der obigen Funktion handelt?
Quora stellte 2016 auch eine ähnliche Frage.
The end result is the same whether you use [ ] or list() and same for { } vs. dict(). There is a difference in performance, though. [ ] and { } are more performant than the alternatives, list() and dict(), mainly because using list() and dict() involves the overhead of symbol lookup and function invocation.
In my opinion, using [ ] and { } is more pythonic. In addition, this notation allows you to take advantage of list/dictionary comprehension.
Übrigens gibt es auch im Wörterbuchtyp zwei Möglichkeiten, ihn mit "dict ()" und "{}" zu definieren. Ist die wörtliche Notation eher pythonisch (wie Python)? Ich verstehe Python immer noch überhaupt nicht.
Ich habe festgestellt, dass sich einige von ihnen unterschiedlich verhalten, aber welches sollte in Situationen verwendet werden, in denen sie sich gleich verhalten? Da es beim Aufruf einen Unterschied zwischen der Funktion und dem Literal gibt, habe ich versucht, ihn mit dem Code zu überprüfen, der das Objekt jeweils 100 Mal erstellt.
list.py
#-*- using:utf-8 -*-
import time
if __name__ == '__main__':
start = time.time()
for i in range(0,100):
exec("list_%d = %s" % (i, []))
elapsed_time1 = time.time() - start
print ("elapsed_time:{0}".format(elapsed_time1) + "[sec]")
start = time.time()
for j in range(100,200):
exec("list_%d = %s" % (j, list()))
elapsed_time2 = time.time() - start
print ("elapsed_time:{0}".format(elapsed_time2) + "[sec]")
~~ Ich sehe, es gibt einen signifikanten Unterschied in der Ausführungszeit! Die Bedeutung der Ausführungszeit im Literal "[]" wurde übrigens auch erkannt, als die Anzahl der Schleifen auf 1000 und 10000 eingestellt wurde. ~~
Wie oben erwähnt, verhält sich jeder, wenn Sie zum Zeitpunkt der Generierung einen Taple als Argument nehmen, anders. Was passiert nach dem Erstellen des Objekts?
python
>>> l1 = []
>>> l1.append((1,2,3))
>>> print(l1)
[(1, 2, 3)]
>>> l2 = list()
>>> l2.append((1,2,3))
>>> print(l2)
[(1, 2, 3)]
Sobald es als Listenobjekt erstellt wurde, scheint es keinen Unterschied im Verhalten zu geben. Ich denke, dieser Bereich ist Python oder objektorientiert ... Ich verstehe objektorientiert nicht.
F. Kann es gemacht werden? Kann nicht? A. Jede Notation kann ausgeführt werden.
Recommended Posts