Сократить синтаксис оператора if python - PullRequest
1 голос
/ 27 апреля 2020

Можно ли сократить приведенные ниже операторы if?

if r < 0: r = 0
elif r > 255: r = 255
if g < 0: g = 0  
elif g > 255: g = 255
if b < 0: b = 0
elif b > 255: b = 255

Ответы [ 3 ]

1 голос
/ 27 апреля 2020

Это то, что вы называете зажимом. Создайте функцию зажима, как показано ниже:

def clamp(n, smallest, largest): 
    return max(smallest, min(n, largest))

Теперь вы можете вызывать ее для своих переменных как

r = clamp(r, 0, 255)
0 голосов
/ 27 апреля 2020

Чтобы ответить на ваш вопрос о закорачивании кода оператора if, который вы предоставили, и об отсутствии альтернативного решения для получения того же результата, что и ваш оператор if.

def rgb_8bit_trunc(r,g,b):

    print("Input: r:{}, g:{}, b:{}".format(r,g,b))

    r = 0 if r < 0 else r if r < 255 else 255
    g = 0 if g < 0 else g if g < 255 else 255
    b = 0 if b < 0 else b if b < 255 else 255

    print("Output: r:{}, g:{}, b:{}".format(r,g,b))

rgb_8bit_trunc(256,256,256)
rgb_8bit_trunc(-1,-1,-1)

Каждый троичный условный оператор эквивалентен оператору if код ниже, где 'value' может быть любой из ваших переменных RGB.

if value < 255:
    if value < 0:
        value = 0
    else:
        value
else:
    value = 255
0 голосов
/ 27 апреля 2020

Вы можете использовать min и max.

r = min(max(r, 0), 255)

Внутреннее выражение гарантирует, что r не меньше 0. Внешнее выражение гарантирует, что оно не больше 255.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...