Найти - Пользователи
Полная версия: Оцените код новичка
Начало » Python для новичков » Оцените код новичка
1 2 3 4
cutwater
FishHook, может быть это…. *внимание барабанная дрожь* декомпозиция
CHAOS
s0rg, PEP 8 - точно. Помню, что где-то про это читал, но не могу вспомнить где, но почему-то ставлю импорты именно в начале:) Спасибо!
FishHook
Господа, вы зря на меня набрасываетесь.
Каковы по вашему мотивы человека, когда он создает топик “Оцените код новичка”?
Видимо человек желает улучшить свои навыки, перенять кой-то опыт от более опытных коллег, а не вылизать до блеска эти 20 строчек кода и забить на всё.
“Я так делаю, потому что привык” - в Питоне зачастую приводит к конфузам, о чем я и намекнул топикстартеру, получился интересный тест.
Soteric
Согласен, что два месяца вылизывать этот код - это перебор и топтание на месте. Стоит писать больше кода, переходить к ООП. А те вещи, о которых здесь говорят, придут со временем сами. Перфекционизм на ранних стадиях опасен :)

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

Soteric тоже прав. Конкретно с этим кодом я немного засиделся, но два месяца не прошли бесследно. За это время я познакомился с Django и сделал на нем же свой первый сайт, адрес которого чуть левее, под аватаром. Ничего не стоит на месте.
Isem
CHAOS
Ничего не стоит на месте.
Мусолить надо.
Ed
CHAOS
Пункт 2. total = len(matches). По старой привычке - это некий кэш. В Python в таких вещах нет необходимости?
Не только в Python. Если переменная не нужна, то можно вызов ставить туда, где он нужен. по-моему достаточно наглядно. Если бы это len(matches) использовалось бы еще где-нибудь, тогда правильнее было бы сохранить его результат в переменной.

5. Какая разница в наличии скобок? Кортеж - он и есть кортеж.
Если работает и без них, то зачем их употреблять тогда? Впрочем это дело вкуса. Мне больше нравится без скобок. a, b = bla() создает иллюзию возврата двух значений, и это хорошо. Если еще и в функции стоит return a, b без скобок, то выглядит как-то эстетичнее на мой взгляд. Зачем мне показывать, что это кортеж, если мне нужны 2 значения?

Продолжим.

1. Вместо options я бы передал в download dir. Это единственное, что там используется, а с dir будет выглядеть понятнее.
2. OPTIONS, ARGS = get_options() - большие буквы выглядят пугающе. Я бы убрал это в отдельный вызов main, как здесь автор языка советует: http://www.artima.com/weblogs/viewpost.jsp?thread=4829
3. Распараллелить загрузку было бы неплохо. Будет работать в разы быстрее. Узкое место в этой и подобных программах - вытаскивание из интернета. Обычно такие вещи делают многопоточными.
4. Наличие рядом print и write сбивает с толку. Используйте print везде - будет читабельнее.
5. Используйте with urlopen(url) as … разу уж перешли на Python3.
6. Первый url_parsed я бы выкинул: netloc = url_parse(url).netloc по-моему выглядит лучше, да и меньше путаницы с использованием url_parsed в двух местах. Во втором, кстати, тоже без нее можно обойтись, хотя это уже дело вкуса. Без нее конструкция будет подлиннее, не всем это понравится.
7. В случае ‘imageshack’ not in netloc and ‘imagevenue’ not in netloc урл останется без изменений. Это так задумано или просто этот вариант не обрабатывается? чтобы таких вопросов не возникало можно как-то более явно это сделать или хотя бы откомментировать.
8. urlretrive по идее должен генерить исключение, если что-то пошло не так. А у вас в коде успешность операции проверяется по наличию файла. Почему так?
9. желательно, чтобы программа возвращала код возврата 0, если все хорошо и не 0, если что-то пошло не так.

Исправите - приходите еще, если не надоело.
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