Em Python, o que significa se um objeto pode ser subscrito ou não?
-
03-07-2019 - |
Pergunta
Quais tipos de objetos se enquadram no domínio de “assinatáveis”?
Solução
Basicamente significa que o objeto implementa o __getitem__()
método. Em outras palavras, descreve objetos que são "contêineres", o que significa que eles contêm outros objetos. Isso inclui listas, tuplas e dicionários.
Outras dicas
No topo da minha cabeça, o seguinte são os únicos embutidos que são subscritos:
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
Mas Resposta de Mipadi está correto - qualquer classe que implementa __getitem__
é subscridente
Um objeto scriptável é um objeto que registra as operações feitas e pode armazená -las como um "script" que pode ser repetido.
Por exemplo, veja: Estrutura de script de aplicativo
Agora, se Alistair não soubesse o que ele pediu e realmente quis dizer objetos "subscritos" (como editado por outros), então (como Mipadi também respondeu), este é o correto:
Um objeto subscridente é qualquer objeto que implemente o __getitem__
Método especial (listas de pensamento, dicionários).
O significado de subscrito em computação é:"um símbolo (idealmente escrito como um subscrito, mas na prática geralmente não) usado em um programa, sozinho ou com outros, para especificar um dos elementos de uma matriz."
Agora, no exemplo simples dado por @usuário2194711 podemos ver que o elemento anexado não pode fazer parte da lista por dois motivos: -
1) Na verdade, não estamos chamando o método anexar;porque precisa ()
para chamá-lo.
2) O erro indica que a função ou método não pode ser subscrito;significa que eles não são indexáveis como uma lista ou sequência.
Agora veja isto: -
>>> 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
Isso significa que não há subscritos ou elementos say em function
como se ocorressem em sequências;e não podemos acessá-los como fazemos, com a ajuda de []
.
Também;como mipadi disse em sua resposta;Basicamente significa que o objeto implementa o __getitem__()
método.(se for subscrito).Assim o erro produziu:
arr.append["HI"]
Erro de tipo:O objeto 'builtin_function_or_method' não é subscrito
Eu tive o mesmo problema. eu estava fazendo
arr = []
arr.append["HI"]
Então usando [
estava causando erro. Deveria ser arr.append("HI")