Найти - Пользователи
Полная версия: Как сделать код более компактным?
Начало » Python для новичков » Как сделать код более компактным?
1
Lxter
Подскажите пожалуйста как сделать это более компактным) Только начал изучить парсинг и хочу как-то это сократить)
 # Берет самый последний год в отчете организации на которую дал ссылку
# Например эта организация выставила отчет в 2021 году последний раз
self.label_20.setText(year1 := list(data)[10])  # 2021 
self.label_21.setText(year2 := list(data)[9]) #2020
self.label_22.setText(year3 := list(data)[8]) #2019
self.label_23.setText(year4 := list(data)[7]) #2018
self.label_24.setText(year5 := list(data)[6]) #2017
# 1200, 1500, 1250 - строки бух. баланса
#Коэффициент текущей ликвидности
self.label_26.setText("{:.2f}".format(data[year1]['values']['1200']/data[year1]['values']['1500']))
self.label_27.setText("{:.2f}".format(data[year2]['values']['1200']/data[year2]['values']['1500']))
self.label_28.setText("{:.2f}".format(data[year3]['values']['1200']/data[year3]['values']['1500']))
self.label_29.setText("{:.2f}".format(data[year4]['values']['1200']/data[year4]['values']['1500']))
self.label_30.setText("{:.2f}".format(data[year5]['values']['1200']/data[year5]['values']['1500']))
#Коэффициент абсолютной ликвидности
self.label_32.setText("{:.2f}".format(data[year1]['values']['1250'] / data[year1]['values']['1500']))
self.label_33.setText("{:.2f}".format(data[year2]['values']['1250'] / data[year2]['values']['1500']))
self.label_34.setText("{:.2f}".format(data[year3]['values']['1250'] / data[year3]['values']['1500']))
self.label_35.setText("{:.2f}".format(data[year4]['values']['1250'] / data[year4]['values']['1500']))
self.label_36.setText("{:.2f}".format(data[year5]['values']['1250'] / data[year5]['values']['1500']))
py.user.next
Тебе нужно сначала подготовить все данные, а уже потом их выводить в метки.
Тебе нужно сначала подготовить все данные, а уже потом их передавать в .format().
Тебе нужно сначала подготовить все данные, а уже потом их передавать в формулу вычисления.

Вот этого всего у тебя нет, поэтому у тебя получилась каша-малаша-параша. Вот её ты не можешь укоротить. А секрет в том, что её не надо делать изначально.

Вот пример
Lxter
  
self.label_21.setText(year2 := list(data)[9]) #2020
Это не умная строчка, а, наоборот, тупая строчка. Ты повкладывал всё что возможно во всё что возможно и теперь сидишь с этим нагромождением и не знаешь, что с ним делать; а с ним ничего сделать нельзя.

Вот пример преобразования
Было
  
self.label_20.setText(year1 := list(data)[10])  # 2021
self.label_21.setText(year2 := list(data)[9]) #2020
self.label_22.setText(year3 := list(data)[8]) #2019
self.label_23.setText(year4 := list(data)[7]) #2018
self.label_24.setText(year5 := list(data)[6]) #2017
Стало
  
data_list = list(data)
 
years = data_list[10:5:-1]
 
labels = (
    self.label_20,
    self.label_21,
    self.label_22,
    self.label_23,
    self.label_24
)
 
for label, year in zip(labels, years):
    label.setText(year)
После этого этот фрагмент можно оформить в виде метода
  
def set_labels_for_years(self, data):
    data_list = list(data)
    years = data_list[10:5:-1]
    labels = (
        self.label_20,
        self.label_21,
        self.label_22,
        self.label_23,
        self.label_24
    )
    for label, year in zip(labels, years):
        label.setText(year)
Затем этот метод в виде шаблона используешь для построения других методов.
Метод для текущей ликвидности (сделан из метода для лет)
  
def set_labels_for_current_liquidity(self, data):
    data_list = list(data)
    years = data_list[10:5:-1]
    labels = (
        self.label_26,
        self.label_27,
        self.label_28,
        self.label_29,
        self.label_30
    )
    def get_coefficient(data, year):
        out = (data[year]['values']['1200']
               / data[year]['values']['1500'])
        return out
    def format_coefficient(value):
        return '{:.2f}'.format(value)
    for label, year in zip(labels, years):
        coefficient = get_coefficient(data, year)
        coefficient_formatted = format_coefficient(coefficient)
        label.setText(coefficient_formatted)
Метод для абсолютной ликвидности (сделан из метода для текущей ликвидности, который сделан из метода для лет)
  
def set_labels_for_absolute_liquidity(self, data):
    data_list = list(data)
    years = data_list[10:5:-1]
    labels = (
        self.label_32,
        self.label_33,
        self.label_34,
        self.label_35,
        self.label_36
    )
    def get_coefficient(data, year):
        out = (data[year]['values']['1250']
               / data[year]['values']['1500'])
        return out
    def format_coefficient(value):
        return '{:.2f}'.format(value)
    for label, year in zip(labels, years):
        coefficient = get_coefficient(data, year)
        coefficient_formatted = format_coefficient(coefficient)
        label.setText(coefficient_formatted)

Проблема обычно не в том, что кода много (много кода - это нормально), а в том, что много кода при неправильной организации этого кода становится непонятной массой, с которой ничего нельзя делать, так как эта куча связана внутри себя вдоль и поперёк. Одно тронешь - другое сломается. И так по всему коду.
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