Найти - Пользователи
Полная версия: Статическая типизация в питоне
Начало » Python для новичков » Статическая типизация в питоне
1 2 3 4 5 6 7 8 9 10 11
wbt
eugenk
Вот тут не знаю. Меня например, привыкшего к фигурным скобкам, первое время (да пожалуй и сейчас тоже) дико раздражали отступы. Особенно когда происходит выход из чего-то глубоко вложенного, это просто пепецЪ как выглядит…

По-моему, наоборот, одиноко висящая скобочка - сразу не понять, к чему относится, там уже вопрос к хилайтам в ide. А как можно не понять блоки, если они визуально выпирают? Ну а делать сильно вложенные блоки огромного размера - это плохо в любом языке. Плюс вопрос, куда эту скобочку повесить. И так некрасиво, и так некрасиво, да ещё лишнюю строчку ест.

Кроме того, они не так часто нужны. Тот же for нужен довольно редко, ибо
[x for x in y if z]
решает

Могу писать хоть в mcedit, хоть в nano, хоть в vim, каких-то особых зависимостей от ide тут и нужно. Могу даже на бумаге скрипт написать, и чаще всего он рабочий будет. И, что важно, будет читаемый - можно будет взять и просто прочитать.

После C-синтаксиса - просто радость жизни, глаза не отвлекаются на посторонние элементы.

Но то уже скорее эстетика. Куда неприятнее например мне было узнать, что в питоне нет оператора switch-case.

А он сильно нужен?

if a == 4:
    pass
elif a in 5,6,22:
    pass
elif a in range(94,1991):
    pass
else:
    pass

А более кучерявые конструкции можно получить диктами.
wbt
Кстати, да, python неприятен, когда его используешь НЕПРАВИЛЬНО. А потом смотришь старый код, и 30 строчек преобразуешь в одну

Python не любит НЕЭЛЕГАНТНОСТИ
py.user.next
eugenk
Когда ни мне ни IDE непонятно, с чем работает та или иная функция в проекте размером в несколько тысяч строк.
[guest@localhost ~]$ python3 -c 'import this' | tail -3
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
[guest@localhost ~]$
sakal
Обратите внимание на Code Like a Pythonista: Idiomatic Python, лишним точно не будет, а вот пользу извлечь можно.
o7412369815963
прочитал 5 страниц, решил высказаться :)

eugenk
Когда ни мне ни IDE непонятно, с чем работает та или иная функция в проекте размером в несколько тысяч строк.

Я думаю у (большинства) питон разработчиков таких проблем не возникает (либо не является проблемой) даже в больших проектах, например разработчики джанги ведут проект > 200k строк кода, у меня один из текущих проектов > 40k строк питон кода - нет проблем. Сам пришел со статических языков (с++, паскаль, 10 лет)

Да и в статическом языке так же, если я использую какую-то ф-ию, я знаю что она делает (иначе зачем её использовать) а значит знаю какие параметры передать. А если где выскочит ошибка при тестировании (или в бою), то просто исправить.

Питон тем и силен что с ним меньше думаешь о мелочах и больше о проекте. :)
По этой причине “auto”, “variable” типы вкручивают в статические языки. И статическая типизация наверно в основном нужна для производительности.

И вообще, у меня все знакомые программисты, кто окунулся в динамическую типизацию не собираются возвращаться в статическую (естественно при учете “инструмент от задачи”).
lorien
Любопытно, что на протяжении 5 страниц питон только нахваливают но книжек толковых не посоветовали, я бы тоже почитал.

Может, я что-то неправильно делаю, использую питон с 2007 года, но я бы тоже не отказался от статической типизации в python. Я ведь работаю или с классами стандартной библиотеки (int, string и более сложные) или со своими собственными классами. В обоих случаях присутствует понятие тип и мне бы не составило особого труда обозначать типы переменных в сигнатурах функций и при объявлении переменных. Я уже давно не писал на static typing языках и может быть, что-то упускаю и на самом деле я не хочу static typing в питоне.

В ней имеет место быть поле width, описывающее ширину. Допустим я хочу задать ширину равной 200. Но я описАлся и пишу вместо panel.width=200, panel.widht=200. Яваскрипт поймет это как то, что для объекта panel введено новое поле widht и ему присвоено значение 200. IDE этот момент не отловит. А поскольку язык не компилируемый, ошибка вылезет только при исполнении и может быть поймана только после долгого мозгофакства на тему почему оно не работает как надо. В С++, благодаря его статической типизации, оно будет выявлено еще при наборе кода с помощью IDE. Что будет на питоне - пока не знаю, ибо с классами еще не программировал. Но опыт использования драйвера для MongoDB, настраивает на довольно мрачные мысли.

Можно использовать слоты (google: python __slot__), это такая хрень, которая оптимизирует потребление памяти объектами за счёт выкидывания __dict__ хреновины из объектов (не знаю, как по научному сказать). Я недавно стал прикручивать слоты в классы своей библиотеки Grab, судя по тестам она стала течь (memory leaks) меньше. Побочным эффектом использования слотов является то, что нельзя уже будет написать obj.widht вместо obj.width - выпадет ошибка т.к. widht не будет описан в слотах. Правда ошибка будет runtime, а не “compile time”, но уже неплохо.
Singularity
lorien
Яваскрипт поймет это как то, что для объекта panel введено новое поле widht и ему присвоено значение 200.
а может fay ?
lorien
> а может fay ?

не понял, что вы написали
Lexander
lorien
В обоих случаях присутствует понятие тип и мне бы не составило особого труда обозначать типы переменных в сигнатурах функций и при объявлении переменных.
В 3 версии можно (опционально) указывать тип переменных функций и возвращаемого результата, переменных класса.
Нужно что-то еще?

В остальном я против, т.к. толку мало (ну не заменит Python Java в корпоративной среде!), а мороки и лишней писанины типа объявления переменных - много.
Плюс стат. типизация помогает разобраться с длинными текстами, а для Питона длинные тексты - моветон.

Но я описАлся и пишу вместо panel.width=200, panel.widht=200. Яваскрипт поймет это как то, что для объекта panel введено новое поле widht и ему присвоено значение 200. IDE этот момент не отловит.
Отловит.
IDE покажет предупреждение, что переменная используется только раз и подчеркнет ее волнистой линией.

ЗЫ
PyCharm.
Singularity
fay это яваскрипт для хаскелистов (принцип такой же как у coffescript) там нет такого безобразия
lorien
А поскольку язык не компилируемый, ошибка вылезет только при исполнении
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