Как стать автором
Обновить

Комментарии 88

Читаемый синтаксис!=качество ПО.
«Перенос программного кода из Linux в Windows заключается в простом копировании файлов программ с одной машины на другую.» — если программа написано ГРАМОТНО :-)

А вот из минусов — нет проверки кода перед исполнением. То есть если я напишу
str='param'
if (i==0):
str=strr+'bad'

ошибку я буду получать только при выполнении условия. C/C++ подобные ошибки обнаружат в легкую. Аналогично про сложение строк и чисел и т.д.
Компилируемый язык != интерпретируемый язык.
Я это прекрасно понимаю. Но проблема с проверкой типов и имен переменных все равно остается :-/
Видимо плохо понимаете. Исходник перед передачего его интерпретатору, только синтаксическим анализатором прогоняется, по большому счету. Синтаксис верен? -Okay, let's do it! Вы же, похоже, хотите предварительную компиляцию? Интерпретируемого языка? Что, серьезно? Я могу подобную же ахинею сказать: пока C/C++ канпелятор канпелирует программу, мой питон уже работает! Считаю это проблемой! Следует более ясно понимать, суть и назначение языка.
Отсутствие проверки типов и имён переменных — это не проблема, это фишка динамически типизированных языков. Компилируемый он или интерпретируемый особого значения не имеет, особенно в наше время, когда интерпретируемые вроде языки используют предварительную компиляцию в байт-код, а во вроде бы компилируемых интерпретируется результат компиляции (тот же по сути байт-код) виртуальной машиной.
Можно использовать pylint/pyflakes. pylint, если мне не изменяет память как раз «выполняет» код, чтобы его проверить. И этот минус, внезапно, не такой уж и минус ;)
Вот, например, вывод pylint:

W:  1,0: Redefining built-in 'str'
C:  1,0: Missing docstring
C:  1,0: Invalid name "str" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$)
E:  2,4: Undefined variable 'i'
C:  3,4: Invalid name "str" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$)
E:  3,10: Undefined variable 'strr'


Я прекрасно понимаю, что static code analysis не панацея, но мне иногда кажется, что если я буду исправлять всё, что мне советует исправить pylint, то у подобных ошибок просто нет шанса выжить :)
а мне иногда кажется, что если исправлять всё, что советует pylint, то надо писать на бейсике
info.update(**hdr) # warning pylint/W0142:Used * or ** magic

contents = filter(lambda x: not x.deleted, self.contents) # warning pylint/W0141:Used builtin function 'filter'

def foo(count): # info pylint/C0102:Black listed name "foo"

Не замечал таких сообщений об ошибках, но запрещать *, ** и встроенные функции — это паранойя.
ну, чисто по-lintовски его понять можно.
это места вероятных ошибок новичков, о чём вполне резонно предупредить.
надо только поотключатьнекторые предупреждения.
Думаю filter легко заменяется на:
contents = [x for x in self.contents if not x.deleted]
В большинстве случаев это наглядней чем лямбда. А код с передачей параметров через * и ** иногда бывает весьма неочевиден и не всегда необходим (единственное что приходит в голову — форвард параметров в другую функцию, например, метод суперкласса).
К слову, built-in функции не запрещаются, только некоторые, вроде map, filter. Да и то это warning, а не error :)
Никто не мешает проверять код с помощью, например, PyChecker. Жаль такая возможность не встроена в интерпретатор.
Да ну, не нужна она там :) Поставить virtualenv с нужными инструментами — 5 минут. Даже pep8.py, который рекомендуется в PEP8 не включен в стандартную поставку.
Ну почему же не нужна? Я думаю многие бы пользовались. По-моему легче написать, например, python -check ./prog.py чем ставить сторонние приблуды.
Я к Emacs подключил pep8 pylint и pyflakes через flymake. Работает отлично прям по ходу редактирования файла.
В sublime text 2 аналогично есть расширение sublime linter, проверка синтаксиса на ходу.
str(7)

'7'

str='param'
str(7)

TypeError: 'str' object is not callable

вы зачем билд-ины переопределяете?
^__^
«Перенос программного кода из Linux в Windows заключается в простом копировании файлов программ с одной машины на другую.» — если программа написано ГРАМОТНО :-)


Если программа написана переносимо. Это не эквивалентно )
почитав Макконнелла думаю:
(Читаемый синтаксис) ∈ (качество ПО)

но в Питоне также можно наделать генераторов, цепочки вызовов и так далее, потому что он слабо ограничивает программиста и там уже все может получиться сложнее чем должно бы быть
Спасибо за статью. Но мне кажется, что давать ссылки на книги на rutracker при том, что их можно совершенно свободно приобрести — это не хорошо (и, наверное, противоречит правилам)
А при отсутствии возможности/желания покупать — найти хитрый способ завладеть ими сможет даже школьник.
Хотел купить Лутца, пока цену не увидел. 3 тысячи за два тома я думаю желание покупать не у многих появляется.
Книги и правда не дешевые. Мне повезло, я успел купить, когда они только вышли, по акции вроде за 1500 за оба тома «программирования».
Спасибо и Вам! Заменил ссылки
Спасибо за ссылки, некоторые еще не встречал. Сам учил язык именно по книгам Лутца. Но, к сожалению, редко получается его использовать в жизни.

P.S. По-моему python.ru умер давно.
P.S.S Вот еще полезная ссылочка. Думаю, понадобится многим.
Заголовок решительно не соответствует содержанию.
Решил поделиться методом обучения

И где метод? Я вижу лишь не очень упорядоченный набор ссылок, который ничуть не лучше, чем список литературы на на статье про Python в Википедии.
Я думаю, что неплохо было бы рассказать, что у Лутца книги по разным версиям. Последнее издание по 3ей версии, предпоследнее по 2.6 с оглядкой на третью версию (если память не изменяет). В целом книги интересные, я с ним в общем-то и начал. Но в зависимости от специализации (если она выбрана), в моем случае это веб, лучше брать предпоследнее издание (на данный момент).
Но самая большая проблема на самом деле, во всех курсах и методиках обучения по ИТ, и я считаю это самым огромным провалом и упущением всех курсов, это отсутствие нормальных курсах по фундаментальным знаниям в ИТ. В школе дают мало, в ВУЗе уже сразу более узкую специализацию. Скажу честно, если бы не мой опыт системного администратора, Лутц был бы для меня тяжел. Помимо того, что он дает просто очень много информации в одной книге, неподготовленному человеку она кажется еще и непонятной с точки зрения основ.
Я как-то задался этим вопросом, хотел дать своей супруге как раз такой курс по фундаменту, для более быстрого вхождения. Оказалось, что таких курсов и книг не оказалось (либо я просто не нашел, хоть и искал долго и много), в итоге сделал подборку из ссылок, и предложить прочесть в определенном порядке.
Если есть примеры удачных курсов или книг, буду благодарен.
В 4-м издании упор сделан на 3 версию, но про вторую он не забыл.
Я бы добавил в качестве примеров проектов, которые широко его используют instagr.am, dropbox, quora, pinterest, disqus, новый digg, reddit, впрочем, продолжать этот список можно долго.
И не только используют, а активно выкладывают свои наработки под open source.
Да-да, для обучения очень полезно походить в отладчике по сложному коду, поглядеть на код из реальной жизни. Опять же, попробовать расширить какую-то функциональность гораздо интереснее, чем писать скучный хелло-ворлд с нуля.
EVE online, если сведения не устарели :)
Не то, что не устарели, но недавно был даже лик исходников, который изрядно порадовал любителей stackless, но stackless мне показался слишком экзотической темой для того, чтобы упоминать проекты на нем.
Это детали, по-моему :)
Яндекс. Расписания например на Django.
Python challenge очень интересный сайт для практики, интересные задачи, которые мотивируют на их решение.
Язык выучить относительно просто по сравнению со всеми эти многочисленными фреймворками и библиотеками, требующимися в работе. Тысячи их, а времени так мало…
а вы сравните с изучением фрейморков и стандартной библиотеки пхп
> Python содержит самые современные механизмы многократного использования программного кода, каким является ООП.

С одной стороны это да, но в то же время насколько я помню инкапсуляция страдает — нет ограничителей области видимости public/private. А еще меня удивляет необходимость в каждом методе объявлять первый аргумент self — зачем?
А еще меня удивляет необходимость в каждом методе объявлять первый аргумент self — зачем?

Явное лучше неявного :)
что чрезмерно — то не на пользу. Во всём нужна умеренность и в данном случае она не соблюдается, на мой взгляд.
тогда стоит отказаться и от динамической типиации.
Сталкивался с этой байдой, в итоге где-то в середине вычислений с флоатами питон считал что там инты, а потом снова приводил к флоатам. все решилось заданием коэффициента через 12.0 вместо 12.

Лучше в целом дробные числа явно всегда указывать, а то такое можно и в C++ схватить

std::array < float, 3> nums{};
std::iota(nums.begin(), nums.end(), 1);
float sum = 0;
sum = std::accumulate(nums.begin(), nums.end(), 0, [] (float a, float b) {
    return a+b/10.0f;
    }
);//0
sum = std::accumulate(nums.begin(), nums.end(), 0.0f, [] (float a, float b) {
    return a+b/10.0f;
    }
);//0.6f
Если название метода начинается с двух подчеркиваний (например, __doSomethig(self)), то он будет приватным.
нет, в Питоне нет приватных методов и свойств из коробки(можно попробовать переписать метод __getattr или __call). __ защищает от возможности переопределения методов.
«Java programmers around the globe are in a panic today over a Wikileaks press release issued at 8:15am GMT. Wikileaks announced that they will re-release the source code for thousands of Open Source Java projects, making all access modifiers 'public' and all classes and members non-'final»
а вы объявляйте this :)
ни о чем… половину инфы можно найти в начале любой книги по Питону (особенно маркетинговый shit про NASA)… это как джава-маркетологи в свое время любили писать про свои виртуальные машины в чайниках, двд-плеерах и тп. сколько уже можно…
Мне очень понравился курс Udacity Design of Computer Programs. Целенаправленно учить Пайтон желания не возникало, но тут он легко выучился сам собой. Кроме того Норвиг пишет очень красивый код.
Сколько раз, интересно, надо повторить, что ООП предназначено не для облегчения повторного использования кода, а для управления сложности?
(«сложностью», конечно)
… а для управления сложностью, в том числе путём облегчения повторного использования кода :)
Пишу на python с 2007 года. Начинаю уже уставать понемногу от его супер-пупер гибкости. Подумываю что-нить более строгое изучить типа java.
Use C, Luke.
Будешь потом либы к питону катать. Чтобы супер-пупер гибкость питона стала ещё более гибкой :3
Чисто формально у python более строгая типизация чем у C.
Гриш, я тут в сторону Scala посматриваю. Говорят очень ок.
Хороший выбор. Scala легко встраивается в любой Java проект. Так же она менее многословна, в отличии от Java.
Если вдруг получится — обязательно напишите статью!
особенно интересно, как вы справитесь с привычками функционального программирования.
функциональные замыкания, передача функций параметрами, декораторы, filter, map, list/dict comprehension, вот это всё.
Ну в той же java, насколько я знаю, это всё есть.

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

Замыкания редко использую, можно сказать, они мне не нужны.

> list/dict comprehension
Ну это вообще синтаксический сахар (как и декораторы в @ запиcи)
Мне не нравится такое поведение из коробки:

>>> 0.5 > True
False
>>> 2 > True
True
>>> 'foo' > 2
True
>>> 'foo' > 2000
True

Т.е. вместо ошибки я получаю какие-то загадочные ответы :) Ну True/False я, кажется, знаю почему так ведут себя т.к. они как-то из int типа сделаны и соотвествуют 1 и 0 числовым значения. Но это не отменяет того факта, что я бы просто Exception хотел видеть в этом месте.
в третьей версии так и есть для строк:
>>> 'fff' > 2
Traceback (most recent call last):
File "<pyshell#6>", line 1, in 'fff' > 2
TypeError: unorderable types: str() > int()

а вообще это обычное приведение типов, не в этом ничего страшного
От того, что вы назвали это приведением типов, такое поведение нравиться мне не перестало :)

> 'foo' + 1
«foo1»

Обычное приведение типов в javascript :) Хорошо хоть такое в python не работает.

Вот ещё про обычное приведение типов :) www.destroyallsoftware.com/talks/wat
Пардон, я там в отрицаниях запутался, вот правильный вариант:
От того, что вы назвали это приведением типов, такое поведение не стало мне нравиться :)
В жаве нету ни фунаргов, ни замыканий, ни continuatons, ни темболее yield.
Ясно, разговора к сожалению не получится, т.к. я не знаю java :)
А концепция yield мне нравится, да.
НЛО прилетело и опубликовало эту надпись здесь
По данному Вами адресу «Описание охватывает наиболее распространенные версии Python: от 1.5.2 до 2.0.» Вам не кажется, что это несколько старовато?
В Udacity обучают программированию с нуля использую Python.

Курс Intro to Computer Science (CS101).
После решения задачек самостоятельно, лектор объясняет как их решать.

Все задания в интерактивном режиме. Можно отслеживать свой прогресс. Нет напряга. И узнаешь много интересного из истории программирования. Например, что первый в истории компилятор написала женщина,
которая кроме всего прочего была контр-адмиралом военно-морских сил США. И еще много всего, и это как бы между делом.

Очень интересно так учится.

Курс хоть и на английском, но лектор все произносит четко и ясно так, что даже минимального знания английского хватит.

Вот галерея лучших проектов, сделанных по окончанию курса.
Парсер Хабра скушал ссылки.
Никак не получается вставить их. Странно.
Рейтинг, дружище, рейтинг. Он бы и разметку так же точно скушал, вместе со ссылками :}
Немножко позабавило вот что:
>Например, что первый в истории компилятор написала женщина, которая кроме всего прочего была контр-адмиралом военно-морских сил США.
Нам это в 9ом классе говорили, на информатике :} Хотя, у всех разные преподаватели, я это понимаю, да.
Курс ведь предназначен для людей, которые первый раз в жизни услышали понятие «язык программирования», не то что «компилятор». :)

Спасибо, что просветили про связь рейтинг — ссылки.
Сайт python.ru уже давно не шевелится. Владелец домена ничего не делает и видимо не продает или пытается продать очень дорого, мог хотя бы список литературы там обновлять.
Некрасиво как-то.
А вот скажите мне пожалуйста, как незнающему — как программы с python потом устанавливать на другие компьютеры? Это каждый раз необходимо будет заставлять пользователя устанавливать интерпретатор?!
Если в большинстве *nix систем Python уже идёт из коробки, то как дела с Windows? Про py2exe я слышал, но отзывы не очень хорошие.
Вот BitTorrent. Написан (если верить ТС) на Pytho, но при установке не требует устанавливать интерпретатор. Он устанавливает его самостоятельно?
Разъясните пожалуйста, кто знает.
Под винды есть ActivePython, и IronPython (под .net).
Гуглится с первого раза, всё с кнопочками 'free download', 47Mb и 15Mb.
Ставится в два клика.

А вот что делать с зависимостями, pip-пакетами и вообще, в каком виде пакеты под винды отдавать и как эти яйца выглядят с того боку — вот это вопрос!
Год назад тут была статья на эту тему
habrahabr.ru/post/117686/
Многие игрушки используют питон в качестве языка сценариев. Интерпретатор ставить не просят. Видимо там всё не так сложно, как страшно :-)
Ещё есть bbfreeze и cx-freeze. (доступны в activepython pypm)

bbfreeze кривое, забывает поставить зависимость, и результат заработал.

cx-freeze вроде заработало, но у меня в пакете был ini-файл, который парсился как os.join(os.path.direname(__file__), «myfile.ini»)
cx с эитм не справился
«Марк Лутц. Изучаем Python, 4-е издание»
не самая лучшая книга по программированию — слишком много повторов и воды, но лучше книги я не нашел

Сейчас идет переход с 2 на 3 версию питона и приходится запоминать много нюансов в обоих

В любом случае Питон захватывает и это окупает любые трудности на его изучение
Увы Программирование на Python (4-е издание) охватывает только 3 версию Python, и его стандартную библиотеку. Всё бы ничего, но я пользуюсь 2-ой, и переходить на 3-ю пока для себя не вижу никакого практического смысла. Большинство дистрибутивов идет с 2 по умолчанию, как и большинство библиотек, не говоря о том что многое до сих пор под 3 недоступно. В итоге книгу читать во многом бессмысленно, а предыдущие издания на русском не нашел. Это грустно, т.к. Изучаем Python прочел, и хотелось бы почитать практический материал.
Немножко дополню: книжка «язык программирования python» — это перевод tutorial'а с python.org. Притом достаточно старого издания (хотя не знаю, много ли там изменилось). Кстати, в английской версии прочёл взахлёб, а в русской перед этим не осилил. Если Откидач для вас тяжеловат — стоит попробовать оригинал.
Лучшей книгой по ознакомлению с синтаксисом и тезисным введением «в двух словах» считаю Rapid GUI Programming with Python and Qt. В первых трёх главах даётся хорошее введение в язык.
Для чего-то интересного советую Dive into Python Пилгрима. Отличная книжка, построенная на примерах. Есть на русском (Вглубь языка Python).
НЛО прилетело и опубликовало эту надпись здесь
Подскажите какого-нибудь практика в Москве, у кого можно поучиться программировать на практике на питоне?
https://www.lektorium.tv/course/22895
Python содержит самые современные механизмы многократного использования программного кода, каким является ООП.


Не совсем корректное определение. Философия Python комментирует использование ООП по-своему.

Про это есть отдельная глава «ООП»:
docs.python-guide.org/en/latest/writing/structure/#object-oriented-programming

  • Python is an object-oriented language.
  • However, unlike Java, Python does not impose object-oriented programming as the main programming paradigm.

Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации