python: сделать переменную равной оператору ( ,/,*,-)

#python #coding-style

#python #стиль кодирования

Вопрос:

можно ли присвоить переменной математический оператор.

это то, что у меня есть в настоящее время, просто образец (введите его сейчас, так что не беспокойтесь о простых ошибках)

 if image == "lighten":
    red_channel = red_channel   50
else:  // image is darken
    red_channel = red_channel  - 50
  

обратите внимание, как я повторяю точно такой же код с другим оператором.
Возможно ли добиться чего-то подобного:

 if (image == "lighten"):
    operator =  
else:
    operator = - 

red_channel = red_channel operator 50
  

Ответ №1:

 import operator
if (image == 'lighten'):
    op = operator.add
else:
    op = operator.sub

red_channel = op(red_channel, 50)
  

Или, если у вас есть несколько возможных операций,

 op = {
    'lighten':operator.add,
    'darken':operator.sub,
     ...
    }
red_channel = op[image](red_channel,50)
  

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

1. 1 за прямой ответ на вопрос OP и ознакомление меня с полезной функцией.

Ответ №2:

Мне нравятся встроенные выражения, поэтому:

 red_channel  = 50 if image == 'lighten' else -50
  

Ответ №3:

Другой вариант, а не переходить к этой длине, если вы выполняете только положительные 50 или отрицательные 50:

 red_channel = red_channel   (flag * 50)
  

Переменная «flag» равна либо 1, либо -1; таким образом, вы получаете 50 или -50. Это не сэкономит много кода для этого небольшого примера, но я использую его время от времени, когда это удобно.

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

1. Я бы посоветовал не использовать flag , потому что обычно флаги являются логическими значениями.