Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 15, 2017 20:30:34

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

Как переписать код в функциональном стиле в классический?

     def size(self):
        return len(self.data), len(self.data[0])  if len(self.data) > 0 else 0

Есть такая функция, записана в одну строку. Правильно ли я ее переписал?

     def size(self):
        if len(self.data) > 0:
            return len(self.data[0])
        else:
            return 0

Офлайн

#2 Ноя. 15, 2017 20:33:35

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

Как переписать код в функциональном стиле в классический?

Судя, по выдаваемому результату - не правильно. Подскажите, что упустил?

UPD кажется понял.

 return len(self.data), len(self.data[0])

Отредактировано n293 (Ноя. 15, 2017 20:34:22)

Офлайн

#3 Ноя. 16, 2017 01:52:05

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

Как переписать код в функциональном стиле в классический?

  
def size(self):
    data_length = len(self.data)
    if data_length > 0:
        data_cell_length = len(self.data[0])
    else:
        data_cell_length = 0
    return data_length, data_cell_length
Много раз вычислять одну и ту же длину не рекомендуется. Код запускается сотни или тысячи раз и эти разы вместе превращаются в долгие секунды. Поэтому исходный однострочник тоже некачественный и мы им не руководствуемся, а реализуем алгоритм заново.

И здесь использовано три приёма:
1) Вычисление длины сведено к одному разу.
Код запускается тысячу раз, мелкие вычисления складываются вместе и превращаются в большие тормоза.
2) У понятий длинные самодокументированные имена.
Код читается сотни раз десятками людей. Короткие имена непонятны и в них нет уверенности, нужно постоянно их перепроверять, убеждаться в их правильном значении, что замедляет чтение такого кода, в котором таких функций сотни.
3) Все выходы из функции сведены к только одному return'у в конце.
Код читается сотни раз десятками людей с разным уровнем мышления. Алгоритм понятен с одного прочтения и без размышлений мозгом любого уровня вместимости, без построения блок-схемы на бумаге или в голове. У функции один вход и один выход.



Отредактировано py.user.next (Ноя. 16, 2017 02:11:08)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version