odnochlen
Окт. 19, 2012 07:11:38
Наткнулся на такой код:
lst = []
if xxx:
# заполняем lst
return lst
else:
return False
Так ведь не надо делать, правда? А почему?
PooH
Окт. 19, 2012 07:51:23
ХЗ, я делаю, правда чуть иначе, для if что False, что None, что пустой список одинаково.
def xxx_list(xxx):
lst = []
if xxx:
# заполняем lst
return lst
и вызов
if xxx_list(bla_bla):
# работаем со списком
А почему нет?
odnochlen
Окт. 19, 2012 09:31:21
Потому что C-way? Потому что надо проверять “код” возврата?
Мне приходят в голову 2 варианта:
- Если по смыслу подходит - вернуть пустой список. Код обработчика результата останется тем же (for item in lst

- Если ситуацию можно считать ошибкой - кидать исключение.
odnochlen
Окт. 19, 2012 09:40:08
PooH
if xxx_list(bla_bla):
# работаем со списком
Точнее так:
lst = xxx_list(bla_bla)
if lst:
# работаем со списком
Против пустого списка - лишняя строчка, которую можно и забыть. Против исключения - см. срач “коды возврата против исключений”.
FishHook
Окт. 19, 2012 09:48:04
odnochlen
Потому что C-way? Потому что надо проверять “код” возврата?
Пусть сишники пишут C-way,
у нас Python-way,
свобода, равенство, упячка
odnochlen
Окт. 19, 2012 10:16:37
Если это был не сарказм: код этот я нашел в gray hat python, в котором на питоне писалась обертка к winapi.
Вот как меня радуют гости из других языков, обычно из си, которые считают, что питон - это такой более простой си, из которого можно пользоваться сишным апи, и тянут на него свои прошлые навыки. Эти ребята пользуются кодами возврата, не знают, что такое ООП.
А самое паршивое - такие люди написали минимум половину сетевой библиотеки питона (ftp, smtp, pop), с кодами возврата и кортежами в качестве результата, где состав кортежей надо каждый раз смотреть в доках, притом, что почти никакая IDE не показывает доки, как эклипс для явы. В результате, пользоваться этим напрямую без оберток почти невозможно.
Собственно, у меня есть ощущение, что так, как в ТС посте, делать не надо, и как надо делать, я просто не могу это четко сформулировать, вот и подумал, может кто поможет.
py.user.next
Окт. 19, 2012 10:38:10
odnochlen
Эти ребята пользуются кодами возврата, не знают, что такое ООП.
с ООП точно такая же лапша получается, когда код растёт
по теме, функции из
re, например, могут возвращать
None
odnochlen
Окт. 20, 2012 02:54:52
py.user.next
по теме, функции из re, например, могут возвращать None
Да, не совсем удобный момент. В перле было проще с его $1 if /(regexp)/.
py.user.next
с ООП точно такая же лапша получается, когда код растёт
Странно, а почему же им повсеместно пользуются, и даже в сях пытаются эмулировать (типа conn_get_username©)?
Парсер пц.
py.user.next
Окт. 20, 2012 08:26:47
wiki. ООПodnochlen
и даже в сях пытаются эмулировать (типа conn_get_username©)?
объект с методами - это ещё не ООП
часто считается, что ООП - гарантия хорошего кода, но это далеко не так