Приветствую, друзья из моего домашнего офиса!
Я реализую скрипт python, который должен проверять, находится ли указанное минимальное / максимальное значение между границами типа данных параметра / сигнала. Входные данные представляют собой электронную таблицу / таблицу с форматом [minValue, maxValue, datatype], например [0, 255, 'uint8']
Поскольку речь идет о среде C, мне нужно проверить пределы uint8, uint16, int32 и float32. Я наткнулся на файл limit.h, в котором все значения определены явно, но я не могу понять, как реализовать его в своем скрипте Python 3.6.8. Моей главной целью было бы сохранить его в чистоте и простоте, без лишней информации, функций, жесткого кодирования.
limit.h
#define INT8MAX 127
#define INT8MIN (-INT8MAX -1)
#define INT16MAX 32767
#define INT16MIN (-INT16MAX -1)
#define INT32MAX 2147483647L
#define INT32MIN (-INT32MAX -1L)
#define UINT8MAX 255
#define UINT8MIN 0
#define UINT16MAX 65535
#define UINT16MIN 0
#define UINT32MAX 4294967295L
#define UINT32MIN 0
#define FLOAT32MAX 3.40282347E+38F
#define FLOAT32MIN -3.40282347E+38F
#define FLOAT64MAX 1.7976931348623157E+308
#define FLOAT64MIN -1.7976931348623157E+308
Каким было бы оптимальное решение этой проблемы? Лучшее, что я мог найти, - это создать словарь и соединить его ключи с вызываемыми функциями, но это означает, что я должен реализовать проверку для каждого типа данных отдельно. (или просто создайте словарь со всеми значениями и ключами, такими как uint8_min , uint8_max , et c)
limit.py
def is_uint8(_min, _max, _dt):
if _max > 255:
print("[ERROR] Max value of parameter is incorrect!")
return 1
elif _min < 0:
print("[ERROR] Min value of parameter is incorrect!")
return -1
else:
return 0
_check = {
'uint8': is_uint8,
'uint16': is_uint16,
'uint32': is_uint32,
'int8': is_int8,
.
.
.
'float32': is_float32
}
def checkLimits4DataType(_min, _max, _dt):
[_dtName, _dtSize] = re.split(r"(\d+)", _dt)
print(_check[_dtName](_min, _max, _dtSize))
Я бы предпочел подобную заголовку структуру для limit.py, со всеми минимальными / максимальными значениями, определенными в верхней части, с как можно меньшим количеством методов check_datatype_limits - обеспечивая максимальную гибкость в отношении его использования. Может быть, определить некоторые классы, которые имеют собственный метод для проверки ограничений?
Заранее спасибо за вашу помощь!
PS Я читал о библиотеке ctypes, но она не содержит все значения / datatype, который мне нужно проверить, плюс он не проверяет переполнения.