Вопрос-Ответ

What does it mean if a Python object is "subscriptable" or not?

Что это значит, является ли объект Python "подписываемым" или нет?

Какие типы объектов попадают в область "подписываемых"?

Переведено автоматически
Ответ 1

По сути, это означает, что объект реализует метод __getitem__(). Другими словами, он описывает объекты, которые являются "контейнерами", что означает, что они содержат другие объекты. Сюда входят строки, списки, кортежи и словари.

Ответ 2

На первый взгляд, ниже приведены единственные встроенные модули, которые могут подписываться:

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

Но ответ мипади правильный - любой класс, который реализует__getitem__ , является подписываемым

Ответ 3

Значение подстрочного индекса в вычислительной технике таково: "символ (условно записываемый как подстрочный индекс, но на практике обычно нет), используемый в программе, отдельно или вместе с другими, для указания одного из элементов массива".

Теперь, в простом примере, приведенном @User мы можем видеть, что добавляющий элемент не может быть частью списка по двум причинам:-


  1. На самом деле мы не вызываем метод append; потому что ему нужно () вызвать его.



  2. Ошибка указывает на то, что функция или метод не поддаются подписке; означает, что они не поддаются индексации, как список или последовательность.



Теперь посмотрите на это:-

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

Это означает, что в function нет нижних индексов или элементов say, поскольку они расположены в последовательностях; и мы не можем получить к ним доступ, как мы обычно делаем, с помощью [].

Также; как мипади сказал в своем ответе; Это в основном означает, что объект реализует __getitem__() метод. (если он подписывается). Таким образом, ошибка привела к:

arr.append["HI"]

TypeError: объект 'builtin_function_or_method' не поддается подписке


Ответ 4

если “scriptable”

Скриптируемый объект - это объект, который записывает выполняемые с ним операции и может сохранять их в виде "скрипта", который можно воспроизвести.

Например, смотрите: Application Scripting Framework

если “подписываемый”

Теперь, если Алистер не знал, о чем спрашивал, и действительно имел в виду "подписываемые" объекты (как отредактировано другими), тогда (как также ответил мипади) это правильное:

Подписываемый объект - это любой объект, который реализует __getitem__ специальный метод (например, списки, словари).

python