En Python, qu'est-ce que cela signifie Si un objet est subscriptible ou non?

Quels types d'objets tombent dans le domaine de "subscriptable"?

223
demandé sur laike9m 2008-10-20 01:08:23

5 réponses

Cela signifie essentiellement que l'objet implémente l' __getitem__() méthode. 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.

211
répondu mipadi 2008-10-19 22:35:05

En haut de ma tête, les éléments suivants sont les seuls intégrés qui sont subscriptibles:

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

46
répondu Dan 2017-11-10 06:12:37

Un objet scriptable est un objet qui enregistre les opérations qui lui sont effectuées et qui peut les stocker sous forme de" script " qui peut être rejoué.

Par exemple, voir: cadre de script D'Application

Maintenant, si Alistair ne savait pas ce qu'il demandait et signifiait vraiment des objets" subscriptables " (tels que modifiés par d'autres), alors (comme mipadi a également répondu) c'est le bon:

Un objet subscriptable est tout objet qui implémente la méthode spéciale __getitem__ (think lists, dictionnaire).

15
répondu tzot 2008-10-19 22:27:37

, j'ai eu ce même problème. Je faisais

arr = []
arr.append["HI"]

Donc, l'utilisation de [ provoquait une erreur. Il devrait être arr.append("HI")

4
répondu user2194711 2017-06-23 05:13:22

La signification de l'indice en informatique est: "un symbole (théoriquement écrit en indice mais en pratique généralement pas) utilisé dans un programme, seul ou avec 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 d'ajout ne peut pas faire partie de la liste pour deux raisons: -

1) Nous n'appelons pas vraiment la méthode append; car elle a besoin de () pour l'appeler.

2) l'erreur indique que la fonction ou la méthode n'est pas inscriptible; signifie qu'ils ne sont pas indexables comme une liste ou une séquence.

Maintenant voir 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'y a pas d'indices ou d'éléments dits dans function comme ils se produisent dans des séquences; et nous ne pouvons pas y accéder comme nous le faisons, avec l'aide de [].

Aussi; comme mipadi l'a dit dans sa réponse; cela signifie essentiellement que l'objet implémente la méthode __getitem__(). (s'il est subscriptible). Ainsi, l'erreur produit:

arr.append["HI"]

TypeError: l'objet' builtin_function_or_method ' n'est pas subscriptable

3
répondu Vicrobot 2018-08-26 15:53:37