Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 19, 2012 07:11:38

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Динамический тип возврата

Наткнулся на такой код:

lst = []
if xxx:
    # заполняем lst
    return lst
else:
    return False
Так ведь не надо делать, правда? А почему?

Офлайн

#2 Окт. 19, 2012 07:51:23

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Динамический тип возврата

ХЗ, я делаю, правда чуть иначе, для if что False, что None, что пустой список одинаково.

def xxx_list(xxx):
    lst = []
    if xxx:
        # заполняем lst
       return lst
и вызов
if xxx_list(bla_bla):
    # работаем со списком
А почему нет?



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Отредактировано PooH (Окт. 19, 2012 07:52:18)

Офлайн

#3 Окт. 19, 2012 07:52:03

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

Динамический тип возврата

Ну а почему бы и нет?



Офлайн

#4 Окт. 19, 2012 09:31:21

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Динамический тип возврата

Потому что C-way? Потому что надо проверять “код” возврата?

Мне приходят в голову 2 варианта:
- Если по смыслу подходит - вернуть пустой список. Код обработчика результата останется тем же (for item in lst
- Если ситуацию можно считать ошибкой - кидать исключение.

Офлайн

#5 Окт. 19, 2012 09:40:08

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Динамический тип возврата

PooH
if xxx_list(bla_bla):
    # работаем со списком
Точнее так:
lst = xxx_list(bla_bla)
if lst:
    # работаем со списком
Против пустого списка - лишняя строчка, которую можно и забыть. Против исключения - см. срач “коды возврата против исключений”.

Офлайн

#6 Окт. 19, 2012 09:48:04

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

Динамический тип возврата

odnochlen
Потому что C-way? Потому что надо проверять “код” возврата?
Пусть сишники пишут C-way,
у нас Python-way,
свобода, равенство, упячка



Офлайн

#7 Окт. 19, 2012 10:16:37

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Динамический тип возврата

Если это был не сарказм: код этот я нашел в gray hat python, в котором на питоне писалась обертка к winapi.

Вот как меня радуют гости из других языков, обычно из си, которые считают, что питон - это такой более простой си, из которого можно пользоваться сишным апи, и тянут на него свои прошлые навыки. Эти ребята пользуются кодами возврата, не знают, что такое ООП.

А самое паршивое - такие люди написали минимум половину сетевой библиотеки питона (ftp, smtp, pop), с кодами возврата и кортежами в качестве результата, где состав кортежей надо каждый раз смотреть в доках, притом, что почти никакая IDE не показывает доки, как эклипс для явы. В результате, пользоваться этим напрямую без оберток почти невозможно.

Собственно, у меня есть ощущение, что так, как в ТС посте, делать не надо, и как надо делать, я просто не могу это четко сформулировать, вот и подумал, может кто поможет.

Отредактировано odnochlen (Окт. 19, 2012 10:17:06)

Офлайн

#8 Окт. 19, 2012 10:38:10

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10010
Репутация: +  857  -
Профиль   Отправить e-mail  

Динамический тип возврата

odnochlen
Эти ребята пользуются кодами возврата, не знают, что такое ООП.
с ООП точно такая же лапша получается, когда код растёт

по теме, функции из re, например, могут возвращать None



Офлайн

#9 Окт. 20, 2012 02:54:52

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Динамический тип возврата

py.user.next
по теме, функции из re, например, могут возвращать None
Да, не совсем удобный момент. В перле было проще с его $1 if /(regexp)/.

py.user.next
с ООП точно такая же лапша получается, когда код растёт
Странно, а почему же им повсеместно пользуются, и даже в сях пытаются эмулировать (типа conn_get_username©)?

Парсер пц.

Отредактировано odnochlen (Окт. 20, 2012 02:55:14)

Офлайн

#10 Окт. 20, 2012 08:26:47

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10010
Репутация: +  857  -
Профиль   Отправить e-mail  

Динамический тип возврата

wiki. ООП

odnochlen
и даже в сях пытаются эмулировать (типа conn_get_username©)?
объект с методами - это ещё не ООП

часто считается, что ООП - гарантия хорошего кода, но это далеко не так



Отредактировано py.user.next (Окт. 20, 2012 08:28:15)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version