Страницы

Поиск по вопросам

понедельник, 9 декабря 2019 г.

Как лаконично и красиво поместить число в диапазон?

#python


Следующий фрагмент кода бросается в глаза своей "топорностью", поэтому хочу его сделать
более красивым.

Делаю простой конвертер изображения из rgb в hex, поэтому значение должно быть на
интервале [0;255]

if number < 0:
    number = 0
if number > 255:
    number = 255


Можно ли средствами Python уменьшить код?
    


Ответы

Ответ 1



Попробуйте так: def clip(val, min_=0, max_=255): return max(min_, min(max_, val)) тесты: In [12]: clip(100) Out[12]: 100 In [13]: clip(1000) Out[13]: 255 In [14]: clip(-1000) Out[14]: 0 по совету @Bogdan, добавлю вариант с использованием тернарного оператора: def clip(val, min_=0, max_=255): return min_ if val < min_ else max_ if val > max_ else val для тех, кто использует Numpy - в Numpy существует готовая функция np.clip(): Пример: import numpy as np In [34]: a = np.arange(10) In [35]: a Out[35]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) In [36]: clipped = np.clip(a, 3, 8) In [37]: clipped Out[37]: array([3, 3, 3, 3, 4, 5, 6, 7, 8, 8])

Комментариев нет:

Отправить комментарий