En Python, ¿qué significa si un objeto es suscriptible o no?
-
03-07-2019 - |
Pregunta
¿Qué tipos de objetos se encuentran en el dominio de " suscriptable " ;?
Solución
Básicamente significa que el objeto implementa el método __getitem __ ()
. En otras palabras, describe objetos que son "contenedores", lo que significa que contienen otros objetos. Esto incluye listas, tuplas y diccionarios.
Otros consejos
En la parte superior de mi cabeza, las siguientes son las únicas incorporaciones que son suscriptibles:
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
Pero la respuesta de mipadi es correcta: cualquier clase que implemente __getitem__
es suscriptible
Un objeto de secuencias de comandos es un objeto que registra las operaciones realizadas y puede almacenarlas como un " script " el cual puede ser reproducido.
Por ejemplo, vea: Marco de scripting de aplicaciones
Ahora, si Alistair no supiera lo que pidió y realmente quiso decir "suscriptable" objetos (como los editan otros), luego (como mipadi también respondió) este es el correcto:
Un objeto suscriptible es cualquier objeto que implementa el método especial __getitem__
(listas de reflexión, diccionarios).
El significado del subíndice en computación es: "Un símbolo (escrito teóricamente como un subíndice, pero en la práctica generalmente no) utilizado en un programa, solo o con otros, para especificar uno de los elementos de una matriz".
Ahora, en el ejemplo simple dado por @ user2194711 podemos ver que el elemento adjunto no puede ser un parte de la lista debido a dos razones: -
1) Realmente no estamos llamando al método adjunto; porque necesita ()
para llamarlo.
2) El error indica que la función o el método no son subscriptibles; significa que no se pueden indexar como una lista o secuencia.
Ahora vea esto: -
>>> 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
Eso significa que no hay subíndices o elementos de la función
como ocurre en secuencias; y no podemos acceder a ellos como lo hacemos, con la ayuda de []
.
También; como mipadi dijo en su respuesta; Básicamente significa que el objeto implementa el método __getitem __ ()
. (si es subscriptable).
Así se produjo el error:
arr.append["HI"]
TypeError: el objeto 'builtin_function_or_method' no es suscriptible
Tuve este mismo problema. Yo estaba haciendo
arr = []
arr.append["HI"]
Por lo tanto, usar [
estaba causando un error. Debería ser arr.append("HI")