Форум сайта python.su
0
RodegastПредложете замену?
В третьем функция отработала, но она мне всё равно не нравится.
RodegastПодусловий там много, но уровень вложенности один. Атрибут может менять значение в зависимости от типа накопителя. Покажете пример, как это сделать со словарями? Есть сомнение, что получится компактнее.
Там только 1 подусловие, по этому его можно заменить на 2 словаря.
Офлайн
88
kazenniyНапример
Покажете пример, как это сделать со словарями?
{(206, True): "Unknown_SSD_Attribute", (206, False): "Flying_Height", (207, True): "Unknown_SSD_Attribute", (207, False): "Spin_High_Current"}[(id_, self.ssd)]
Офлайн
0
А если атрибут имеет одно значение при любом типе диска, его обязательно тоже дважды прописывать или можно как-то сократить?
Офлайн
88
kazenniyМожно сокращать, можно не сокращать. Комбинировать условия со словарями никто не возбраняет, а большой словарь будет ещё и быстрее большого блока альтернатив.
А если атрибут имеет одно значение при любом типе диска, его обязательно тоже дважды прописывать или можно как-то сократить?
Офлайн
0
Попробую перевести самый большой блок в словари и сравню размеры.
Офлайн
186
> Подусловий там много, но уровень вложенности один.
Никаких подусловий кроме self.ssd я не увидел.
> Покажете пример, как это сделать со словарями?
if self.ssd: return {1:"Raw_Read_Error_Rate", 2:"Throughput_Performance", 6:"Unknown_SSD_Attribute"}.get(Id, "Unknown_Attribute") else: return {1:"Raw_Read_Error_Rate", 2:"Throughput_Performance", 6:"Read_Channel_Margin"}.get(Id, "Unknown_Attribute")
Отредактировано Rodegast (Окт. 31, 2016 22:08:49)
Офлайн
0
Да, в таком виде код выглядит намного опрятнее. Перепишу все таким образом.
Вот бы еще перевети в подобную форму такие сравнения:
if cap & 0x800:
self.sataGen = "Gen.3 (6.0Gb/s)"
elif cap & 0x400:
self.sataGen = "Gen.2 (3.0Gb/s)"
elif cap & 0x200:
self.sataGen = "Gen.1 (1.5Gb/s)"
else:
self.sataGen = ""
Офлайн
0
Разобрался, как можно сделать. Обновил код на гитхабе. Огромное спасибо за наводку!
Попутно узнал, что ключем словаря может быть даже условие, ведь оно будет вычисляться на момент создания словаря.
def get_temp_description(temp):
return {
temp < -20: 'Холодно',
-20 <= temp < 0: 'Прохладно',
0 <= temp < 15: 'Зябко',
15 <= temp < 25: 'Тепло',
25 <= temp: 'Жарко'
}[True]
Офлайн