Ваше решение оставляет много работы для повторного человека, создающего файл.Это источник ошибки (вы должны написать каждое имя три раза).Если у вас есть файл, в который нужно время от времени обновлять его (например, когда выходят новые выпуски ядра), вам суждено рано или поздно включить ошибку.На самом деле, это был просто длинный способ сказать, что ваше решение нарушает DRY .
Я бы изменил ваше решение на что-то вроде этого:
IFA_UNSPEC = 0
IFA_ADDRESS = 1
IFA_LOCAL = 2
IFA_LABEL = 3
IFA_BROADCAST = 4
IFA_ANYCAST = 5
IFA_CACHEINFO = 6
IFA_MULTICAST = 7
__IFA_MAX = 8
values = {globals()[x]:x for x in dir() if x.startswith('IFA_') or x.startswith('__IFA_')}
Это былоvalues
dict генерируется автоматически.Возможно, вы захотите (или должны) изменить условие в операторе if
в соответствии с тем, что находится в этом файле.Может быть, что-то вроде следующего.Эта версия избавила бы от необходимости перечислять префиксы в операторе if, но она не состоялась бы, если бы в файле были другие элементы.
values = {globals()[x]:x for x in dir() if not x.endswith('__')}
Конечно, вы могли бы сделать что-то более сложное, например проверитьслучайно повторенные значения.