In Python, cosa significa se un oggetto è sottoscrivibile o no?
-
03-07-2019 - |
Domanda
Quali tipi di oggetti rientrano nel dominio di " subscriptable " ;?
Soluzione
Fondamentalmente significa che l'oggetto implementa il metodo __getitem __ ()
. In altre parole, descrive oggetti che sono "contenitori", nel senso che contengono altri oggetti. Ciò include elenchi, tuple e dizionari.
Altri suggerimenti
In cima alla mia testa, i seguenti sono gli unici built-in sottoscrivibili:
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
Ma la risposta di mipadi è corretta - qualsiasi classe che implementa __getitem__
è iscrivibile
Un oggetto gestibile da script è un oggetto che registra le operazioni eseguite ad esso e può memorizzarle come "script" che può essere riprodotto.
Ad esempio, vedi: Framework di scripting dell'applicazione
Ora, se Alistair non sapeva cosa aveva chiesto e intendeva veramente "quotabile" " oggetti (come modificato da altri), quindi (come anche mipadi ha risposto) questo è quello corretto:
Un oggetto sottoscrivibile è qualsiasi oggetto che implementa il metodo speciale __getitem__
(elenchi di pensiero, dizionari).
Il significato dell'abbonamento nell'informatica è: " un simbolo (teoricamente scritto come un pedice ma in pratica di solito non) usato in un programma, da solo o con altri, per specificare uno degli elementi di un array. "
Ora, nel semplice esempio fornito da @ user2194711 possiamo vedere che l'elemento aggiunto non è in grado di essere un parte dell'elenco per due motivi: -
1) Non stiamo davvero chiamando il metodo append; perché ha bisogno di ()
per chiamarlo.
2) L'errore indica che la funzione o il metodo non è sottoscrivibile; significa che non sono indicizzabili come un elenco o una sequenza.
Ora vedi questo: -
>>> 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
Ciò significa che non ci sono pedici o dicono elementi nella funzione
come accadono nelle sequenze; e non possiamo accedervi come facciamo noi, con l'aiuto di []
.
Inoltre; come mipadi ha detto nella sua risposta; Fondamentalmente significa che l'oggetto implementa il metodo __getitem __ ()
. (se è abbonabile).
Quindi l'errore ha prodotto:
arr.append["HI"]
TypeError: l'oggetto 'builtin_function_or_method' non è sottoscrivibile
Ho avuto lo stesso problema. Stavo facendo
arr = []
arr.append["HI"]
Quindi l'uso di [
stava causando errori. Dovrebbe essere arr.append("HI")