Я использую Python 3.6.4
У меня есть класс, в котором я вычисляю кучу атрибутов.Я должен округлить все это до различных десятичных разрядов, и некоторые из них могут быть Нет.
Пример:
Предположим, у меня есть следующие атрибуты, значения, десятичные разряды
a, 1.155 , 0
b, 1.123 , 2
c, None , 1
...
в результате мне нужно получить
a= 1.2
b= 1.23
c= None
...
Тривиальное решение
Я иду для каждого атрибута и округляю его как
if attribute is not None:
attribute = round(attribute, decimal_places)
но у меня слишком много атрибутов.
То, что я пробовал:
Я составил список кортежей (attribute, decimal_places).Например:
attributes_decimal_places = [
(self.a, 0),
(self.b, 2),
(self.c, 1),
]
В этом списке я могу запустить следующую команду, которая дает мне правильные округленные значения, но я не могу сохранить значения этого результата в атрибутах
solution = [round(x[0], x[1]) if isinstance(x[0], float) else x[0] for x in attributes_decimal_points]
Вопрос:
Как получить округленные значения в атрибутах, а не в списке?
Решение:
Спасибовсем, кто ответил.Решение, которое отлично работает для меня:
attributes_decimal_points = [
(self.a, "a", 1),
(self.b, "b", 2),
(self.c, "c", 3)
]
for attribute in attributes_decimal_points:
if attribute[0] is None:
continue
else:
setattr(self, attribute[1], round(attribute[0], attribute[2]))