Форум сайта python.su
0
Ребят.
Как избавиться от огромного количества условий?
Смысл в том, чтобы пользователь ввел символ и в зависимости от символа выполнялся запрос по sql.
Простыни if привели к тому, что я уже сам с трудом ориентируюсь в коде. Помогите начинающему Разработчику найти альтернативу или другой подход.
Офлайн
568
xxnikolayxx
Ребят.
Как избавиться от огромного количества условий?
Смысл в том, чтобы пользователь ввел символ и в зависимости от символа выполнялся запрос по sql.
Простыни if привели к тому, что я уже сам с трудом ориентируюсь в коде. Помогите начинающему Разработчику найти альтернативу или другой подход.
actions={
'+':lambda x,y:x+y,
'-':lambda x,y:x-y,
'*':lambda x,y:x*y,
'/':lambda x,y:x/y,
}
x=1
y=1
polzovatel_vvel='*'
print action[polzovatel_vvel](x,y)Офлайн
1
разделить и властвовать. (ц)
У тебя проблема не сколько с иф/ельзе, сколько с логикой “все в одной куче”
выноси каждое действие в отдельную процедуру, принимающую определенный параметр и возвращающую определенное значение.
функции в питоне - объекты. потому можно сделать (и делают) словарь, как показал ФишХук.
def vid_set_PUT(param):
....
def vid_set_GET(param):
....
def vid_set_POST(param):
....
....
....
## забацали словарь, значениями которого являются наши функции
run={
'PUT':vid_set_PUT,
'POST':vid_set_POST,
'GET':vid_set_GET
}
## получаем ключ (определяемся, какое действие будет вЬІполняться)
## получить ключ можем как угодно, например
## action=raw_input().strip()
action = request.POST.get('method_','GET')
# вЬІполняем функцию, тоесть обращаемся к значению в словаре run по ключу action
# напр. если action='GET', то run[action] == run['GET'] == функция vid_set_GET
# и конструкция будет єквивалентна data , ret = vid_set_GET(request)
data , ret = run[action](request)
Офлайн
0
Ахрененно.
Надо учить словари, они меня уже второй раз спасают - охрененная вещь.
Всем спасибо.
Отредактировано (Фев. 27, 2012 13:04:09)
Офлайн