Найти - Пользователи
Полная версия: Статическая типизация в питоне
Начало » Python для новичков » Статическая типизация в питоне
1 2 3 4 5 6 7 8 9 10 11
o7412369815963
doza_and
и тип не может быть изменён позже
Звучит как недостаток (а в питоне, может). Особенно если опустить “проблемы” проверки тип на стадии компиляции и скорости исполнения.

Я имею в виду что статическая типизация нужна не для того что-б типы нельзя было менять, а для прочих вещей (скорость, проверки в ide и пр.), а если так, то она является недостатком (хоть и дающая другие плюсы).

Что если с этой стороны посмотреть?
lorien
А зачем может понадобится менять тип объекта, не очень понимаю.
doza_and
doza_and
дженерики которые недавно появились в плюсах и черт знает когда в джаве и сишарпе
Ради исторической справедливости, template появились в c++ очень давно, где-то в девяностых. У меня есть диск с компиляторами 1998 года они там уже вовсю используются.
В шарпе и яве дженерики тоже были не от самого рождения.
http://ru.wikipedia.org/wiki/Java#Java_1.2 как я понимаю они начались с версии 5.0 в 2004 году. Могу ошибаться не спец я по яве.
Шарп списывался с обоих и generics полноценно появились в 2005 году в версии 2.0.

FishHook
Где хочешь там и вставляй.
Ну конечно, для строк умножение в c++ не определено. Доопределите и будет работать. Абсолютно аналогично будет и питон работать:
def dva(obj):
    return obj*2
>>> dva({2:3,1:3})    
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in dva
TypeError: unsupported operand type(s) for *: 'dict' and 'int'
Прописывать или не прописывать проверку типов и в каком объеме и какую часть оставить на unit тестирование это уже просто архитектурное решение.
Когда я еще не писал на питоне, я писал на c++. В некторых проектах код был настолько обобщенным, что практически весь состоял из шаблонов. Автодополнение тоже работало через пень колоду, а сообщения об ошибках компиляции размером в несколько страниц могли интерпретировать только особо умудренные опытом особы.

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

p.s.
:) конечно python и c++ не одно и тоже
bismigalis
o7412369815963
Что если с этой стороны посмотреть?
есть только в проекте http://www.mypy-lang.org/
Lexander
lorien
А зачем может понадобится менять тип объекта, не очень понимаю.
Фраза очень хорошо показывает недопонимание сути.
Я не упрекаю, мы все так пытаемся делать.
Это попытка объясниться с помощью другого понятийного аппарата при отсутствии прямого аналога.

В нетипизированных языках отсутствует понятие типа, поэтому нельзя изменить тип.

Однако, можно явно указать правила выполнения различных методов и операций над объектами.
Например, в web к нам приходят строковые данные в виде чисел, к которым мы хотим применить операции сложения, а не конкатенации строк.
В расширенном смысле можно сказать, что мы типа Строка у переменной меняем на тип Число.

“Изменение типа” в web - это самый очевидный пример, свойственный всем языкам.

У Питона есть некоторые вкусности, позволяющие легко и просто “изменить тип”, выполнив при этом какую-то полезную работу. Например, преобразование list в set заодно оставит в результате “преобразования” только уникальные элементы.
lorien
Я спрашивал не o type casting, который сплошь и рядом, а о смене типа у объекта. Зачем нужен type casting вопроса у меня не возникает.

> foo = “4”
> bar = int(foo)

Это не смена типа объекта, это создание нового объекта

> foo = “4”
> foo = int(foo)

Это тоже создание нового объекта.

Что такое один и тот же объект в моём понимании? Это когда id(foo) == id(bar)

Я просто неправильно прочитал слова , почему-то про изменение типа одного и того же объекта подумал.

> В нетипизированных языках отсутствует понятие типа, поэтому нельзя изменить тип.

Это что за языки такие? Даже в php и javascript есть типы.
Lexander
lorien
> В нетипизированных языках отсутствует понятие типа, поэтому нельзя изменить тип.
Это что за языки такие? Даже в php и javascript есть типы.
Написал так в смысле организации и способа хранения переменных в памяти.
Именно так, как вы написали:
foo = int(foo)
создает новый объект, а не изменяет тип.

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

ЗЫ
Кстати, я упустил тип Variant в типизированных языках, где можно менять тип переменной явно
Там есть поле, указывающее текущий тип.
bismigalis
разница в том что в статически типизированных тип привязывается к имени переменной, а в динамически типизированных нет. Тип у объектов есть и там, и там.
o7412369815963
На хабре небольшой холивар появился про типизацию
sp3
a = 100
a+= 999999999999999999

int a = 0;
a = a+ 99999999999999999999;
С питоном не нужно думать о таких мелочах
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB