637 Stimmen

Was bedeutet es, wenn ein Python-Objekt "subscriptable" ist oder nicht?

Welche Arten von Objekten fallen in den Bereich der "subscriptable"?

579voto

mipadi Punkte 377834

Es bedeutet im Wesentlichen, dass das Objekt die __getitem__() Methode. Mit anderen Worten, sie beschreibt Objekte, die "Container" sind, d. h. sie enthalten andere Objekte. Dazu gehören Zeichenketten, Listen, Tupel und Wörterbücher.

114voto

Dan Punkte 4515

Soweit ich weiß, sind die folgenden Build-Ins die einzigen, die subscriptable sind:

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

Aber mipadis Antwort ist korrekt - jede Klasse, die die __getitem__ ist subskribierbar

26voto

Vicrobot Punkte 3491

Die Bedeutung von Subskription im Rechnen ist: "ein Symbol (das fiktiv als tiefgestellt geschrieben wird, in der Praxis aber meist nicht), das in einem Programm allein oder zusammen mit anderen verwendet wird, um eines der Elemente eines Arrays anzugeben".

In dem einfachen Beispiel, das durch @user2194711 sehen wir, dass das anhängende Element aus zwei Gründen nicht Teil der Liste sein kann:-

1) Wir rufen die Methode append nicht wirklich auf; denn sie benötigt () zu nennen.

2) Der Fehler zeigt an, dass die Funktion oder Methode nicht subscriptable ist; das bedeutet, dass sie nicht indizierbar sind wie eine Liste oder Sequenz.

Und jetzt das:-

>>> 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

Das bedeutet, dass es keine Indizes oder Say-Elemente in function wie sie in Sequenzen vorkommen; und wir können nicht auf sie zugreifen, wie wir es mit Hilfe von [] .

Auch; als mipadi sagte in seiner Antwort; Es bedeutet im Wesentlichen, dass das Objekt die __getitem__() Methode. (wenn sie subscriptable ist). Dadurch wird der Fehler erzeugt:

arr.append["HI"]

TypeError: Das Objekt 'builtin_function_or_method' ist nicht subscriptable

21voto

tzot Punkte 86792

Ein skriptfähiges Objekt ist ein Objekt, das die mit ihm durchgeführten Operationen aufzeichnet und sie als "Skript" speichert, das wiedergegeben werden kann.

Siehe zum Beispiel: Application Scripting Framework

Nun, wenn Alistair nicht wusste, was er fragte, und wirklich "subscriptable" Objekte (wie von anderen editiert) meinte, dann (wie mipadi auch antwortete) ist dies die korrekte Variante:

Ein subscriptable Objekt ist jedes Objekt, das die __getitem__ spezielle Methode (z. B. Listen, Wörterbücher).

12voto

user2194711 Punkte 133

Ich hatte das gleiche Problem. Ich war dabei

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

Also mit [ einen Fehler verursacht hat. Es sollte sein arr.append("HI")

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X