En Python, qu'est-ce que cela signifie si un objet est souscrit ou non?
-
03-07-2019 - |
Question
Quels types d'objets entrent dans le domaine "subscriptable"?
La solution
Cela signifie essentiellement que l'objet implémente la méthode __ getitem __ ()
. En d'autres termes, il décrit des objets qui sont des "conteneurs", ce qui signifie qu'ils contiennent d'autres objets. Cela inclut les listes, les tuples et les dictionnaires.
Autres conseils
En tête de ma liste, voici les seuls composants intégrés pouvant être indexés:
string: "foobar"[3] == "b"
tuple: (1,2,3,4)[3] == 4
list: [1,2,3,4][3] == 4
dict: {"a":1, "b":2, "c":3}["c"] == 3
Mais la réponse de mipadi est correcte - toute classe qui implémente __ getitem __
est subscriptable
Un objet scriptable est un objet qui enregistre les opérations qui lui ont été effectuées et qui peut les stocker sous forme de "script". qui peut être rejoué.
Par exemple, voir: Framework de script d'application
Maintenant, si Alistair ne savait pas ce qu’il demandait et voulait vraiment dire "subscriptable" objets (édités par d'autres), puis (comme mipadi également répondu) c'est le bon:
Un objet pouvant être souscrit est un objet qui implémente la méthode spéciale __ getitem __
(listes de réflexion, dictionnaires).
La signification de l'indice en informatique est: "Un symbole (écrit théoriquement sous forme d’indice mais en pratique pas dans la pratique) utilisé dans un programme, seul ou associé à d’autres, pour spécifier l’un des éléments d’un tableau."
Maintenant, dans l'exemple simple donné par @ user2194711 , nous pouvons voir que l'élément ajouté ne peut pas être un élément partie de la liste pour deux raisons: -
1) Nous n'appelons pas vraiment la méthode append; car il faut ()
pour l'appeler.
2) L'erreur indique que la fonction ou la méthode n'est pas enregistrable. signifie qu'ils ne sont pas indexables comme une liste ou une séquence.
Maintenant, voyez ceci: -
>>> var = "myString"
>>> def foo(): return 0
...
>>> var[3]
't'
>>> foo[3]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'function' object is not subscriptable
Cela signifie qu’il n’ya pas d’indices ni d’éléments dits dans la fonction
comme ils apparaissent dans les séquences; et nous ne pouvons pas y accéder comme nous le faisons, avec l'aide de []
.
Aussi; comme mipadi a déclaré dans sa réponse; Cela signifie fondamentalement que l'objet implémente la méthode __ getitem __ ()
. (s'il est enregistrable).
Ainsi, l’erreur produite:
arr.append["HI"]
TypeError: l'objet 'builtin_function_or_method' n'est pas souscriptable
J'ai eu le même problème. Je faisais
arr = []
arr.append["HI"]
L'utilisation de [
a donc causé une erreur. Il doit s'agir de arr.append ("HI")