Найти - Пользователи
Полная версия: Динамический тип возврата
Начало » Python для новичков » Динамический тип возврата
1 2 3
odnochlen
Наткнулся на такой код:
lst = []
if xxx:
    # заполняем lst
    return lst
else:
    return False
Так ведь не надо делать, правда? А почему?
PooH
ХЗ, я делаю, правда чуть иначе, для if что False, что None, что пустой список одинаково.
def xxx_list(xxx):
    lst = []
    if xxx:
        # заполняем lst
       return lst
и вызов
if xxx_list(bla_bla):
    # работаем со списком
А почему нет?
FishHook
Ну а почему бы и нет?
odnochlen
Потому что C-way? Потому что надо проверять “код” возврата?

Мне приходят в голову 2 варианта:
- Если по смыслу подходит - вернуть пустой список. Код обработчика результата останется тем же (for item in lst
- Если ситуацию можно считать ошибкой - кидать исключение.
odnochlen
PooH
if xxx_list(bla_bla):
    # работаем со списком
Точнее так:
lst = xxx_list(bla_bla)
if lst:
    # работаем со списком
Против пустого списка - лишняя строчка, которую можно и забыть. Против исключения - см. срач “коды возврата против исключений”.
FishHook
odnochlen
Потому что C-way? Потому что надо проверять “код” возврата?
Пусть сишники пишут C-way,
у нас Python-way,
свобода, равенство, упячка
odnochlen
Если это был не сарказм: код этот я нашел в gray hat python, в котором на питоне писалась обертка к winapi.

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

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

Собственно, у меня есть ощущение, что так, как в ТС посте, делать не надо, и как надо делать, я просто не могу это четко сформулировать, вот и подумал, может кто поможет.
py.user.next
odnochlen
Эти ребята пользуются кодами возврата, не знают, что такое ООП.
с ООП точно такая же лапша получается, когда код растёт

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

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

Парсер пц.
py.user.next
wiki. ООП

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

часто считается, что ООП - гарантия хорошего кода, но это далеко не так
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