Найти - Пользователи
Полная версия: Библиотека ATA Pass-Through для pyhton3 под linux.
Начало » Python проекты » Библиотека ATA Pass-Through для pyhton3 под linux.
1 2 3
kazenniy
Rodegast
В третьем функция отработала, но она мне всё равно не нравится.
Предложете замену?

Rodegast
Там только 1 подусловие, по этому его можно заменить на 2 словаря.
Подусловий там много, но уровень вложенности один. Атрибут может менять значение в зависимости от типа накопителя. Покажете пример, как это сделать со словарями? Есть сомнение, что получится компактнее.
Shaman
kazenniy
Покажете пример, как это сделать со словарями?
Например
 {(206, True): "Unknown_SSD_Attribute",
 (206, False): "Flying_Height",
 (207, True): "Unknown_SSD_Attribute",
 (207, False): "Spin_High_Current"}[(id_, self.ssd)]
kazenniy
А если атрибут имеет одно значение при любом типе диска, его обязательно тоже дважды прописывать или можно как-то сократить?
Shaman
kazenniy
А если атрибут имеет одно значение при любом типе диска, его обязательно тоже дважды прописывать или можно как-то сократить?
Можно сокращать, можно не сокращать. Комбинировать условия со словарями никто не возбраняет, а большой словарь будет ещё и быстрее большого блока альтернатив.
kazenniy
Попробую перевести самый большой блок в словари и сравню размеры.
Rodegast
> Подусловий там много, но уровень вложенности один.

Никаких подусловий кроме 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")
kazenniy
Да, в таком виде код выглядит намного опрятнее. Перепишу все таким образом.
Вот бы еще перевети в подобную форму такие сравнения:
        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 = ""
Причем если поддерживается Gen.3 то значение cap будет 0xE00
kazenniy
Разобрался, как можно сделать. Обновил код на гитхабе. Огромное спасибо за наводку!
Попутно узнал, что ключем словаря может быть даже условие, ведь оно будет вычисляться на момент создания словаря.
def get_temp_description(temp):
return {
temp < -20: 'Холодно',
-20 <= temp < 0: 'Прохладно',
0 <= temp < 15: 'Зябко',
15 <= temp < 25: 'Тепло',
25 <= temp: 'Жарко'
}[True]
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