Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 16, 2012 19:28:28

cutwater
От:
Зарегистрирован: 2009-01-08
Сообщения: 444
Репутация: +  19  -
Профиль   Отправить e-mail  

Оцените код новичка

FishHook, может быть это…. *внимание барабанная дрожь* декомпозиция



Офлайн

#2 Янв. 16, 2012 19:32:35

CHAOS
От:
Зарегистрирован: 2011-11-19
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Оцените код новичка

s0rg, PEP 8 - точно. Помню, что где-то про это читал, но не могу вспомнить где, но почему-то ставлю импорты именно в начале:) Спасибо!



Отредактировано (Янв. 16, 2012 19:33:00)

Офлайн

#3 Янв. 17, 2012 04:18:03

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Оцените код новичка

Господа, вы зря на меня набрасываетесь.
Каковы по вашему мотивы человека, когда он создает топик “Оцените код новичка”?
Видимо человек желает улучшить свои навыки, перенять кой-то опыт от более опытных коллег, а не вылизать до блеска эти 20 строчек кода и забить на всё.
“Я так делаю, потому что привык” - в Питоне зачастую приводит к конфузам, о чем я и намекнул топикстартеру, получился интересный тест.



Офлайн

#4 Янв. 17, 2012 05:18:03

Soteric
От:
Зарегистрирован: 2010-09-19
Сообщения: 352
Репутация: +  20  -
Профиль   Отправить e-mail  

Оцените код новичка

Согласен, что два месяца вылизывать этот код - это перебор и топтание на месте. Стоит писать больше кода, переходить к ООП. А те вещи, о которых здесь говорят, придут со временем сами. Перфекционизм на ранних стадиях опасен :)

Но заявление о том, что вынесение кода в функции необходимо минимизировать из-за дороговизны вызова, звучит не очень корректно.



Офлайн

#5 Янв. 17, 2012 16:22:02

CHAOS
От:
Зарегистрирован: 2011-11-19
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Оцените код новичка

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

Soteric тоже прав. Конкретно с этим кодом я немного засиделся, но два месяца не прошли бесследно. За это время я познакомился с Django и сделал на нем же свой первый сайт, адрес которого чуть левее, под аватаром. Ничего не стоит на месте.



Офлайн

#6 Янв. 17, 2012 16:44:55

Isem
От:
Зарегистрирован: 2010-08-27
Сообщения: 447
Репутация: +  7  -
Профиль   Отправить e-mail  

Оцените код новичка

CHAOS
Ничего не стоит на месте.
Мусолить надо.



Офлайн

#7 Янв. 17, 2012 22:46:48

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Оцените код новичка

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, если что-то пошло не так.

Исправите - приходите еще, если не надоело.



Отредактировано (Янв. 17, 2012 22:50:47)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version