Als ich versuchte, den Typ des Taples herauszufinden, bekam ich den Fehler "TypeError:" Typ "Objekt ist nicht abonnierbar". Das Fazit war, dass ich den Indexoperator für etwas verwendete, das kein Tupel war.
Beispiel: my_tuple [0]
Die Ursache kann in einem Wort beschrieben werden, aber ich fand es interessant, als ich den Taple von hier aus untersuchte. Schauen wir uns zunächst den diesmal aufgetretenen Fehler an.
foo = (object)
type(foo)
# => type
type(foo[0])
# => TypeError: 'type' object is not subscriptable
#Machen Sie zwei Elemente
foo = (object, str)
foo[0]
# => object
type(foo)
# => tuple
Ich habe es numerisch versucht und erhalte das gleiche Ergebnis. Ich denke, das liegt daran, dass es bei Python nur um Objekte geht.
bar = (0)
type(bar)
# => int
bar[0]
# => TypeError: 'int' object is not subscriptable
#Machen Sie zwei Elemente
bar = (1,2)
bar[0]
# => 1
type(bar)
# =>tuple
Stellen Sie sicher, dass Sie einen beliebigen Typ in den Taple einfügen können.
foo = (object, 1)
type(foo)
# => tuple
Wie definieren Sie einen Einzelelement-Taple? Die Antwort war in der offiziellen Dokumentation.
Verwenden Sie Kommas für Einzelelement-Taples: a oder (a,) 4. Integrierter Typ - Python 3.4.3-Dokumentation </ cite >
Ich habe es sofort versucht.
foo = (object,)
type(foo)
# => tuple
foo[0]
# => object
Wenn Sie ein Komma hinzufügen, wird es als Taple erkannt. ** Es ist ein Fehler zu denken "Ich verstehe! Kann ein Tupel durch Kombinieren von Klammern () und Kommas erstellt werden!" ** Es ist leicht, hier erwischt zu werden. Das offizielle Dokument enthielt jedoch eine höfliche Erklärung.
Beachten Sie, dass Taples mit Kommas und nicht mit Klammern erstellt werden. Die Ausnahme ist ein leerer Taple, für den Klammern erforderlich sind. Wenn die Verwendung von „nichts“ ohne Klammern zulässig ist, wird die Grammatik verdeckt. Häufige Tippfehler werden nicht mehr erkannt. 6. Expression - Python 3.4.3-Dokumentation < / zitieren>
** "Erstellt durch Kommas" **. Lassen Sie uns dies überprüfen.
()
# => ()
type(())
# => tuple
1,2
# => (1, 2)
type(1,2)
# => TypeError: type() takes 1 or 3 arguments
type((1,2))
# => tuple
foo = 1,
foo
# => (1,)
type(foo)
# => tuple
Ich brauchte keine Klammern außer einem leeren Taple. Wenn Sie jedoch versuchen, ein Taple im laufenden Betrieb zu generieren, wenn Sie es an ein Funktionsargument übergeben, wird es als mehrere Argumente erkannt, sofern Sie keine Klammern hinzufügen. Die Klammern im obigen Argument werden als Operator verwendet, um die Priorität zu erhöhen, indem zuerst der Taple generiert und dann als Argument übergeben wird.
Wenn Sie ein leeres Taple ohne Klammern definieren können, können Sie kein Leerzeichen erstellen (kein Leerzeichen mit halber Breite). Leere Taples können am Ende und überall in leeren Linien in Massenproduktion hergestellt werden.
Was wurde zurückgegeben, wenn kein Komma vorhanden war? Lass es uns überprüfen.
foo = (object)
foo
# => object
bar = (1)
bar
# => 1
(object)
# => object
(1)
# => 1
Das Argument wurde so zurückgegeben, wie es war. Dies wurde auch in der offiziellen Dokumentation geschrieben.
Die Liste der Ausdrücke in Klammern entspricht jedem Ausdruck: Wenn die Liste mindestens ein Komma enthält, handelt es sich um ein Taple, andernfalls wird die Liste der Ausdrücke erstellt Dies ist der ** Wert des einzelnen Ausdrucks selbst **. 6. Expression - Python 3.4.3-Dokumentation < / zitieren>
Apropos, bei der Ausführung von arithmetischen Operationen werden Klammern verwendet, um die Priorität von + und- zu erhöhen, aber dies gibt auch den Auswertungswert des Ausdrucks in den Klammern zurück.
1 + 3 * 2
# => 7
(1 + 3) * 2
# => 8
Liste der Derimitas für die Wortanalyse in offiziellen Dokumenten hatte Klammern und enthielt keine Operatoren. Ist die Klammer, die eine Funktion in Python aufruft, nicht ein "Funktionsaufrufoperator"?
[C-Sprache von Wikipedia](https://ja.wikipedia.org/wiki/C%E3%81%A8C%2B%2B%E3%81%AE%E6%BC%94%E7%AE%97%E5 Bei% AD% 90) sind die Klammern () immer noch der Operator "Funktionsaufruf". Bitte lassen Sie mich wissen, wenn jemand weiß.
Recommended Posts