Все возможные типы переменных в python - PullRequest
0 голосов
/ 23 января 2012

Как мы можем знать все возможные типы переменных? Рассмотрим следующий пример:

n = int(raw_input())

if n<50:
        a = 5
elif n<100:
         a = 6.8
else:
         a = 'abc'

print type(a)

Но, в зависимости от значения n ...

выводит либо int, либо float, либо str.

Разве мы не можем иметь все возможные типы переменных? Например, вышеприведенное должно дать что-то вроде:

{INT, поплавок, ул}

Ответы [ 4 ]

5 голосов
/ 23 января 2012

Вы должны перечислить все типы, известные интерпретатору Python.Я предполагаю, что это было бы возможно, но это было бы по существу бессмысленно, поскольку существует так много типов.

Python - это динамически типизированный язык, и поэтому он не имеет переменных в том же смысле, что и языки со статической типизацией, такие как C. В вашем фрагменте a - это просто имя, которое связано с объектом.Этот объект может относиться к любому типу, известному интерпретатору Python.

Существует фундаментальное различие в мышлении при программировании на динамически типизированном языке и при задании вопросов, таких как какой тип этого объекта? необходимо избегать.Вместо этого предпочтительнее задавать вопросы в форме , какие операции поддерживает этот объект? Этот подход к программированию известен как типирование утки .

5 голосов
/ 23 января 2012

Вы не можете определить это во время выполнения, так как тип переменной зависит от пути выполнения. Насколько я знаю, не существует инструмента статического анализа, который мог бы сделать это либо.

2 голосов
/ 23 января 2012

Я думаю, что суть в том, что переменные в python вообще не имеют какого-либо типа.Переменные - это просто теги, которые ссылаются на объект, которому они были назначены.Что действительно содержит тип, так это сам объект.

В дополнение к этому, учитывая, что любой тип объекта может быть присвоен переменной, количество возможных типов для объектов, на которые ссылается переменная, равноколичество возможных типов, которые вы можете создать на языке, который должен быть почти свободным числом в зависимости от аппаратного обеспечения.

0 голосов
/ 24 января 2012

Разве мы не можем иметь все возможные типы переменных?

Нет, потому что переменные в Python не имеют типа; значения до.

Когда вы пишете type(a), вы не проверяете тип переменной с именем a; вы проверяете тип вещи, к которой относится имя a (которое может иметь и другие имена).

...