Quand j'ai essayé de trouver le type du taple, j'ai eu l'erreur TypeError: 'type' object is not subscriptable
. L'essentiel était que j'utilisais l'opérateur indice pour quelque chose qui n'était pas un tuple.
Exemple: mon_tuple [0]
La cause peut être décrite en un mot, mais j'ai trouvé cela intéressant lorsque j'ai enquêté sur le taple d'ici. Tout d'abord, examinons l'erreur qui s'est produite cette fois.
foo = (object)
type(foo)
# => type
type(foo[0])
# => TypeError: 'type' object is not subscriptable
#Faire deux éléments
foo = (object, str)
foo[0]
# => object
type(foo)
# => tuple
Je l'ai essayé numériquement et j'obtiens le même résultat. Je pense que c'est parce que python est une question d'objets.
bar = (0)
type(bar)
# => int
bar[0]
# => TypeError: 'int' object is not subscriptable
#Faire deux éléments
bar = (1,2)
bar[0]
# => 1
type(bar)
# =>tuple
Assurez-vous que vous pouvez mettre n'importe quel type dans le taple.
foo = (object, 1)
type(foo)
# => tuple
Comment définissez-vous un seul élément taple? La réponse était dans la documentation officielle.
Utilisez des virgules pour les taples à élément unique: a, ou (a,) 4. Type intégré - Documentation Python 3.4.3 </ cite >
Je l'ai essayé tout de suite.
foo = (object,)
type(foo)
# => tuple
foo[0]
# => object
Si vous ajoutez une virgule, elle sera reconnue comme un taple. ** C'est une erreur de penser "Je vois! Peut-on créer un tuple en combinant des parenthèses () et des virgules!" ** Il est facile de se faire prendre ici. Cependant, il y avait une explication polie dans le document officiel.
Notez que les taples sont créés avec des virgules et non avec des parenthèses. L'exception est un taple vide, qui nécessite des parenthèses - autoriser l'utilisation de «rien» sans parenthèses obscurcirait la grammaire. Les fautes de frappe courantes ne sont plus détectées. 6. Expression - Documentation Python 3.4.3 < / cite>
** "Créé par des virgules" **. Vérifions ça.
()
# => ()
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
Je n'avais pas besoin de parenthèses sauf pour un taple vide. Cependant, si vous essayez de générer un taple à la volée en le passant à un argument de fonction, il sera reconnu comme plusieurs arguments à moins que vous n'ajoutiez des parenthèses. Les parenthèses dans l'argument ci-dessus sont utilisées comme opérateur pour augmenter la priorité en générant d'abord le taple puis en le passant comme argument.
De plus, si vous pouvez définir un taple vide sans parenthèses, vous ne pouvez pas créer de blanc (pas un espace demi-largeur). Les taples vides peuvent être produits en série en lignes vierges, à la fin et partout.
Qu'est-ce qui était retourné quand il n'y avait pas de virgule? Vérifions-le.
foo = (object)
foo
# => object
bar = (1)
bar
# => 1
(object)
# => object
(1)
# => 1
L'argument a été renvoyé tel quel. Cela a également été écrit dans la documentation officielle.
La liste des expressions entre parenthèses sera ce que chaque expression représente: si la liste contient au moins une virgule, ce sera un taple; sinon elle composera la liste des expressions Ce sera la ** valeur de l'expression unique elle-même **. 6. Expression - Documentation Python 3.4.3 < / cite>
En parlant de cela, lors de l'exécution d'opérations arithmétiques, les parenthèses sont utilisées pour augmenter la priorité de + et-, mais cela renvoie également la valeur d'évaluation de l'expression à l'intérieur des parenthèses.
1 + 3 * 2
# => 7
(1 + 3) * 2
# => 8
Liste des derimitas pour l'analyse des phrases dans les documents officiels avait des parenthèses et n'incluait pas d'opérateurs. La parenthèse qui appelle une fonction en python n'est-elle pas un "opérateur d'appel de fonction"?
[Langage C de wikipedia](https://ja.wikipedia.org/wiki/C%E3%81%A8C%2B%2B%E3%81%AE%E6%BC%94%E7%AE%97%E5 En regardant% AD% 90), les parenthèses () sont toujours l'opérateur "appel de fonction". S'il vous plaît laissez-moi savoir si quelqu'un sait.
Recommended Posts