Comments 88
Читаемый синтаксис!=качество ПО.
«Перенос программного кода из Linux в Windows заключается в простом копировании файлов программ с одной машины на другую.» — если программа написано ГРАМОТНО :-)
А вот из минусов — нет проверки кода перед исполнением. То есть если я напишу
str='param'
if (i==0):
str=strr+'bad'
ошибку я буду получать только при выполнении условия. C/C++ подобные ошибки обнаружат в легкую. Аналогично про сложение строк и чисел и т.д.
«Перенос программного кода из Linux в Windows заключается в простом копировании файлов программ с одной машины на другую.» — если программа написано ГРАМОТНО :-)
А вот из минусов — нет проверки кода перед исполнением. То есть если я напишу
str='param'
if (i==0):
str=strr+'bad'
ошибку я буду получать только при выполнении условия. C/C++ подобные ошибки обнаружат в легкую. Аналогично про сложение строк и чисел и т.д.
Компилируемый язык != интерпретируемый язык.
Я это прекрасно понимаю. Но проблема с проверкой типов и имен переменных все равно остается :-/
Видимо плохо понимаете. Исходник перед передачего его интерпретатору, только синтаксическим анализатором прогоняется, по большому счету. Синтаксис верен? -Okay, let's do it! Вы же, похоже, хотите предварительную компиляцию? Интерпретируемого языка? Что, серьезно? Я могу подобную же ахинею сказать: пока C/C++ канпелятор канпелирует программу, мой питон уже работает! Считаю это проблемой! Следует более ясно понимать, суть и назначение языка.
Отсутствие проверки типов и имён переменных — это не проблема, это фишка динамически типизированных языков. Компилируемый он или интерпретируемый особого значения не имеет, особенно в наше время, когда интерпретируемые вроде языки используют предварительную компиляцию в байт-код, а во вроде бы компилируемых интерпретируется результат компиляции (тот же по сути байт-код) виртуальной машиной.
Можно использовать pylint/pyflakes. pylint, если мне не изменяет память как раз «выполняет» код, чтобы его проверить. И этот минус, внезапно, не такой уж и минус ;)
Вот, например, вывод pylint:
Я прекрасно понимаю, что static code analysis не панацея, но мне иногда кажется, что если я буду исправлять всё, что мне советует исправить 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]
В большинстве случаев это наглядней чем лямбда. А код с передачей параметров через * и ** иногда бывает весьма неочевиден и не всегда необходим (единственное что приходит в голову — форвард параметров в другую функцию, например, метод суперкласса).
Да ну, не нужна она там :) Поставить virtualenv с нужными инструментами — 5 минут. Даже pep8.py, который рекомендуется в PEP8 не включен в стандартную поставку.
Ну почему же не нужна? Я думаю многие бы пользовались. По-моему легче написать, например, python -check ./prog.py чем ставить сторонние приблуды.
Я к Emacs подключил pep8 pylint и pyflakes через flymake. Работает отлично прям по ходу редактирования файла.
В sublime text 2 аналогично есть расширение sublime linter, проверка синтаксиса на ходу.
Строго говоря, это не только проверка синтаксиса.
Судя по коду github.com/SublimeLinter/SublimeLinter/blob/master/sublimelinter/modules/python.py оно не поддерживает pylint, что не очень хорошо.
Судя по коду github.com/SublimeLinter/SublimeLinter/blob/master/sublimelinter/modules/python.py оно не поддерживает pylint, что не очень хорошо.
Ну тогда есть вот это. github.com/biermeester/Pylinter
str(7)
'7'
str='param'
str(7)
TypeError: 'str' object is not callable
вы зачем билд-ины переопределяете?
^__^
«Перенос программного кода из Linux в Windows заключается в простом копировании файлов программ с одной машины на другую.» — если программа написано ГРАМОТНО :-)
Если программа написана переносимо. Это не эквивалентно )
почитав Макконнелла думаю:
(Читаемый синтаксис) ∈ (качество ПО)
но в Питоне также можно наделать генераторов, цепочки вызовов и так далее, потому что он слабо ограничивает программиста и там уже все может получиться сложнее чем должно бы быть
(Читаемый синтаксис) ∈ (качество ПО)
но в Питоне также можно наделать генераторов, цепочки вызовов и так далее, потому что он слабо ограничивает программиста и там уже все может получиться сложнее чем должно бы быть
Спасибо за статью. Но мне кажется, что давать ссылки на книги на rutracker при том, что их можно совершенно свободно приобрести — это не хорошо (и, наверное, противоречит правилам)
Заголовок решительно не соответствует содержанию.
И где метод? Я вижу лишь не очень упорядоченный набор ссылок, который ничуть не лучше, чем список литературы на на статье про Python в Википедии.
Решил поделиться методом обучения
И где метод? Я вижу лишь не очень упорядоченный набор ссылок, который ничуть не лучше, чем список литературы на на статье про Python в Википедии.
Я думаю, что неплохо было бы рассказать, что у Лутца книги по разным версиям. Последнее издание по 3ей версии, предпоследнее по 2.6 с оглядкой на третью версию (если память не изменяет). В целом книги интересные, я с ним в общем-то и начал. Но в зависимости от специализации (если она выбрана), в моем случае это веб, лучше брать предпоследнее издание (на данный момент).
Но самая большая проблема на самом деле, во всех курсах и методиках обучения по ИТ, и я считаю это самым огромным провалом и упущением всех курсов, это отсутствие нормальных курсах по фундаментальным знаниям в ИТ. В школе дают мало, в ВУЗе уже сразу более узкую специализацию. Скажу честно, если бы не мой опыт системного администратора, Лутц был бы для меня тяжел. Помимо того, что он дает просто очень много информации в одной книге, неподготовленному человеку она кажется еще и непонятной с точки зрения основ.
Я как-то задался этим вопросом, хотел дать своей супруге как раз такой курс по фундаменту, для более быстрого вхождения. Оказалось, что таких курсов и книг не оказалось (либо я просто не нашел, хоть и искал долго и много), в итоге сделал подборку из ссылок, и предложить прочесть в определенном порядке.
Если есть примеры удачных курсов или книг, буду благодарен.
Но самая большая проблема на самом деле, во всех курсах и методиках обучения по ИТ, и я считаю это самым огромным провалом и упущением всех курсов, это отсутствие нормальных курсах по фундаментальным знаниям в ИТ. В школе дают мало, в ВУЗе уже сразу более узкую специализацию. Скажу честно, если бы не мой опыт системного администратора, Лутц был бы для меня тяжел. Помимо того, что он дает просто очень много информации в одной книге, неподготовленному человеку она кажется еще и непонятной с точки зрения основ.
Я как-то задался этим вопросом, хотел дать своей супруге как раз такой курс по фундаменту, для более быстрого вхождения. Оказалось, что таких курсов и книг не оказалось (либо я просто не нашел, хоть и искал долго и много), в итоге сделал подборку из ссылок, и предложить прочесть в определенном порядке.
Если есть примеры удачных курсов или книг, буду благодарен.
Я бы добавил в качестве примеров проектов, которые широко его используют instagr.am, dropbox, quora, pinterest, disqus, новый digg, reddit, впрочем, продолжать этот список можно долго.
И не только используют, а активно выкладывают свои наработки под open source.
EVE online, если сведения не устарели :)
Яндекс. Расписания например на Django.
Python challenge очень интересный сайт для практики, интересные задачи, которые мотивируют на их решение.
Язык выучить относительно просто по сравнению со всеми эти многочисленными фреймворками и библиотеками, требующимися в работе. Тысячи их, а времени так мало…
> Python содержит самые современные механизмы многократного использования программного кода, каким является ООП.
С одной стороны это да, но в то же время насколько я помню инкапсуляция страдает — нет ограничителей области видимости public/private. А еще меня удивляет необходимость в каждом методе объявлять первый аргумент self — зачем?
С одной стороны это да, но в то же время насколько я помню инкапсуляция страдает — нет ограничителей области видимости public/private. А еще меня удивляет необходимость в каждом методе объявлять первый аргумент self — зачем?
А еще меня удивляет необходимость в каждом методе объявлять первый аргумент self — зачем?
Явное лучше неявного :)
Явное лучше неявного :)
что чрезмерно — то не на пользу. Во всём нужна умеренность и в данном случае она не соблюдается, на мой взгляд.
тогда стоит отказаться и от динамической типиации.
Сталкивался с этой байдой, в итоге где-то в середине вычислений с флоатами питон считал что там инты, а потом снова приводил к флоатам. все решилось заданием коэффициента через 12.0 вместо 12.
Сталкивался с этой байдой, в итоге где-то в середине вычислений с флоатами питон считал что там инты, а потом снова приводил к флоатам. все решилось заданием коэффициента через 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)), то он будет приватным.
«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
Будешь потом либы к питону катать. Чтобы супер-пупер гибкость питона стала ещё более гибкой :3
Гриш, я тут в сторону Scala посматриваю. Говорят очень ок.
Если вдруг получится — обязательно напишите статью!
особенно интересно, как вы справитесь с привычками функционального программирования.
функциональные замыкания, передача функций параметрами, декораторы, filter, map, list/dict comprehension, вот это всё.
особенно интересно, как вы справитесь с привычками функционального программирования.
функциональные замыкания, передача функций параметрами, декораторы, filter, map, list/dict comprehension, вот это всё.
Ну в той же java, насколько я знаю, это всё есть.
Декораторы я не очень люблю, на мой взгляд они запутывают код (в виде @записи). Т.е. вместо явного вызова функции-декоратора, мы с помощью магического записи @ объявляем, что она должна будет вызвна в определённый момент.
Замыкания редко использую, можно сказать, они мне не нужны.
> list/dict comprehension
Ну это вообще синтаксический сахар (как и декораторы в @ запиcи)
Декораторы я не очень люблю, на мой взгляд они запутывают код (в виде @записи). Т.е. вместо явного вызова функции-декоратора, мы с помощью магического записи @ объявляем, что она должна будет вызвна в определённый момент.
Замыкания редко использую, можно сказать, они мне не нужны.
> list/dict comprehension
Ну это вообще синтаксический сахар (как и декораторы в @ запиcи)
Мне не нравится такое поведение из коробки:
>>> 0.5 > True
False
>>> 2 > True
True
>>> 'foo' > 2
True
>>> 'foo' > 2000
True
Т.е. вместо ошибки я получаю какие-то загадочные ответы :) Ну True/False я, кажется, знаю почему так ведут себя т.к. они как-то из int типа сделаны и соотвествуют 1 и 0 числовым значения. Но это не отменяет того факта, что я бы просто Exception хотел видеть в этом месте.
>>> 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()
а вообще это обычное приведение типов, не в этом ничего страшного
>>> '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
> 'foo' + 1
«foo1»
Обычное приведение типов в javascript :) Хорошо хоть такое в python не работает.
Вот ещё про обычное приведение типов :) www.destroyallsoftware.com/talks/wat
В жаве нету ни фунаргов, ни замыканий, ни continuatons, ни темболее yield.
В Udacity обучают программированию с нуля использую Python.
Курс Intro to Computer Science (CS101).
После решения задачек самостоятельно, лектор объясняет как их решать.
Все задания в интерактивном режиме. Можно отслеживать свой прогресс. Нет напряга. И узнаешь много интересного из истории программирования. Например, что первый в истории компилятор написала женщина,
которая кроме всего прочего была контр-адмиралом военно-морских сил США. И еще много всего, и это как бы между делом.
Очень интересно так учится.
Курс хоть и на английском, но лектор все произносит четко и ясно так, что даже минимального знания английского хватит.
Вот галерея лучших проектов, сделанных по окончанию курса.
Курс Intro to Computer Science (CS101).
После решения задачек самостоятельно, лектор объясняет как их решать.
Все задания в интерактивном режиме. Можно отслеживать свой прогресс. Нет напряга. И узнаешь много интересного из истории программирования. Например, что первый в истории компилятор написала женщина,
которая кроме всего прочего была контр-адмиралом военно-морских сил США. И еще много всего, и это как бы между делом.
Очень интересно так учится.
Курс хоть и на английском, но лектор все произносит четко и ясно так, что даже минимального знания английского хватит.
Вот галерея лучших проектов, сделанных по окончанию курса.
Парсер Хабра скушал ссылки.
Никак не получается вставить их. Странно.
Никак не получается вставить их. Странно.
Рейтинг, дружище, рейтинг. Он бы и разметку так же точно скушал, вместе со ссылками :}
Немножко позабавило вот что:
>Например, что первый в истории компилятор написала женщина, которая кроме всего прочего была контр-адмиралом военно-морских сил США.
Нам это в 9ом классе говорили, на информатике :} Хотя, у всех разные преподаватели, я это понимаю, да.
Немножко позабавило вот что:
>Например, что первый в истории компилятор написала женщина, которая кроме всего прочего была контр-адмиралом военно-морских сил США.
Нам это в 9ом классе говорили, на информатике :} Хотя, у всех разные преподаватели, я это понимаю, да.
Сайт python.ru уже давно не шевелится. Владелец домена ничего не делает и видимо не продает или пытается продать очень дорого, мог хотя бы список литературы там обновлять.
Некрасиво как-то.
Некрасиво как-то.
А вот скажите мне пожалуйста, как незнающему — как программы с python потом устанавливать на другие компьютеры? Это каждый раз необходимо будет заставлять пользователя устанавливать интерпретатор?!
Если в большинстве *nix систем Python уже идёт из коробки, то как дела с Windows? Про py2exe я слышал, но отзывы не очень хорошие.
Вот BitTorrent. Написан (если верить ТС) на Pytho, но при установке не требует устанавливать интерпретатор. Он устанавливает его самостоятельно?
Разъясните пожалуйста, кто знает.
Если в большинстве *nix систем Python уже идёт из коробки, то как дела с Windows? Про py2exe я слышал, но отзывы не очень хорошие.
Вот BitTorrent. Написан (если верить ТС) на Pytho, но при установке не требует устанавливать интерпретатор. Он устанавливает его самостоятельно?
Разъясните пожалуйста, кто знает.
Под винды есть ActivePython, и IronPython (под .net).
Гуглится с первого раза, всё с кнопочками 'free download', 47Mb и 15Mb.
Ставится в два клика.
А вот что делать с зависимостями, pip-пакетами и вообще, в каком виде пакеты под винды отдавать и как эти яйца выглядят с того боку — вот это вопрос!
Гуглится с первого раза, всё с кнопочками 'free download', 47Mb и 15Mb.
Ставится в два клика.
А вот что делать с зависимостями, pip-пакетами и вообще, в каком виде пакеты под винды отдавать и как эти яйца выглядят с того боку — вот это вопрос!
Год назад тут была статья на эту тему
habrahabr.ru/post/117686/
habrahabr.ru/post/117686/
Многие игрушки используют питон в качестве языка сценариев. Интерпретатор ставить не просят. Видимо там всё не так сложно, как страшно :-)
Ещё есть bbfreeze и cx-freeze. (доступны в activepython pypm)
bbfreeze кривое, забывает поставить зависимость, и результат заработал.
cx-freeze вроде заработало, но у меня в пакете был ini-файл, который парсился как os.join(os.path.direname(__file__), «myfile.ini»)
cx с эитм не справился
bbfreeze кривое, забывает поставить зависимость, и результат заработал.
cx-freeze вроде заработало, но у меня в пакете был ini-файл, который парсился как os.join(os.path.direname(__file__), «myfile.ini»)
cx с эитм не справился
«Марк Лутц. Изучаем Python, 4-е издание»
не самая лучшая книга по программированию — слишком много повторов и воды, но лучше книги я не нашел
Сейчас идет переход с 2 на 3 версию питона и приходится запоминать много нюансов в обоих
В любом случае Питон захватывает и это окупает любые трудности на его изучение
не самая лучшая книга по программированию — слишком много повторов и воды, но лучше книги я не нашел
Сейчас идет переход с 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).
Лучшей книгой по ознакомлению с синтаксисом и тезисным введением «в двух словах» считаю Rapid GUI Programming with Python and Qt. В первых трёх главах даётся хорошее введение в язык.
Для чего-то интересного советую Dive into Python Пилгрима. Отличная книжка, построенная на примерах. Есть на русском (Вглубь языка Python).
Недавно начавшийся курс «Learn to Program» на Coursera
Подскажите какого-нибудь практика в Москве, у кого можно поучиться программировать на практике на питоне?
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.
Sign up to leave a comment.
Учим Python качественно