Найти - Пользователи
Полная версия: Как переписать код в функциональном стиле в классический?
Начало » Центр помощи » Как переписать код в функциональном стиле в классический?
1
n293
     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
n293
Судя, по выдаваемому результату - не правильно. Подскажите, что упустил?

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

 return len(self.data), len(self.data[0])
py.user.next
  
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'у в конце.
Код читается сотни раз десятками людей с разным уровнем мышления. Алгоритм понятен с одного прочтения и без размышлений мозгом любого уровня вместимости, без построения блок-схемы на бумаге или в голове. У функции один вход и один выход.
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