[Python] Ausdruck (1,2) macht kein Taple mit Klammern

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]

Auf Fehler prüfen

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?

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

Es ist das Komma, das das Tupel macht

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 bedeutet die Klammer?

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

Wird die Klammer zum Aufrufen einer Funktion in Python nicht als Operator verwendet?

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

[Python] Ausdruck (1,2) macht kein Taple mit Klammern
Kombinieren Sie sich wiederholende Zeichenfolgen mit regulären Python-Ausdrücken zu einer.
Erstelle Puyopuyo AI mit Python
Python-Version wechselt nicht
Erstelle einen LINE-Bot mit Python + Heroku
Machen Sie Apache Log CSV mit Python
String-Ersetzung durch regulären Python-Ausdruck
Erstellen Sie ein Empfehlungssystem mit Python
Lassen Sie uns ein Diagramm mit Python erstellen! !!
Machen Sie die Python-Konsole mit UNKO bedeckt
Lassen Sie uns mit Python ein Shiritori-Spiel machen
Fraktal zum Erstellen und Spielen mit Python
Das Autopep8-Format [VScode] funktioniert nicht. [Python]
Virtualenv funktioniert nicht unter Python 3.5 (Windows)
Lassen Sie uns mit Python langsam sprechen
Der Befehl gqlgen funktioniert nicht mit go's gqlgen
Erleichtern Sie die Einreichung von Pypys mit atcoder-cli (Python)
[Python] Lassen Sie uns matplotlib mit Japanisch kompatibel machen
Python> Python enthält nicht den letzten Offset
Erstellen Sie ein Webframework mit Python! (1)
Erstellen Sie eine Desktop-App mit Python mit Electron
Machen wir einen Twitter-Bot mit Python!
Erstellen Sie ein Webframework mit Python! (2)
Opencv4.1 + Windows10 + Python 3.7.5 cv2.VideoCapture wird nicht korrekt angezeigt
Pyinstaller verwandelt Python-Skripte in EXE-Dateien, die unter Windows ausgeführt werden können
Machen Sie Twitter Trend Bot mit Heroku + Python
Python-Protokoll wird nicht mit Docker-Compose ausgegeben
Ich möchte ein Spiel mit Python machen
Versuchen Sie, in Python einen "Entschlüsselungs" -Code zu erstellen
Stellen Sie OpenCV3 in Python3 zur Verfügung, das mit pyenv installiert wurde
Erstellen Sie schnell Ihr eigenes Modul mit setuptools (Python)
Jinja2 2.9.6 funktioniert nicht mit der Lambda Python 3-Serie
Ersetzen wir UWSC durch Python (5) Machen wir einen Roboter
Versuchen Sie, mit Python eine Diedergruppe zu bilden
Konvertieren Sie JSON mit Python von Splunk in CSV
Lassen Sie Python, das mit jhbuild erstellt wurde, unter OSX funktionieren
Wenn die Platzhalterspezifikation mit Pylint nicht funktioniert
Die boolesche Python-Operation gibt keinen booleschen Wert zurück
[# 1] Mach Minecraft mit Python. ~ Vorforschung und Design ~
FizzBuzz in Python3
Scraping mit Python
Statistik mit Python
Scraping mit Python
Python mit Go
Twilio mit Python
Spielen Sie mit 2016-Python
Getestet mit Python
mit Syntax (Python)
Bingo mit Python
Excel mit Python
Mikrocomputer mit Python
Mit Python besetzen
[Python] Der Boolesche Operator (oder / und) gibt keinen Booleschen Wert zurück
Python> nicht np.isnan (loss_value) behaupten, 'Modell divergiert mit Verlust = NaN'
Lassen Sie uns ein Befehls-Standby-Tool mit Python erstellen
Die Ereigniserfassung mit der rechten Maustaste funktioniert nicht mit opencv-python
Schlüsseleingabe, die nicht auf Schlüsseleingabe in Python wartet
Erklären Sie ausführlich, wie Sie mit Python einen Sound erzeugen