Это "весть" метод функций выполняется на основе значений кортежа?


У меня есть ситуации, где у меня есть шесть возможных ситуаций, которые могут относиться к четырем различным результатам. Вместо использования продлевается, если/другое заявление, мне было интересно, если было бы более подходящие для Python, чтобы использовать словарь, чтобы вызывать функции, которые я назвал бы внутри, если/другое в качестве замены оператора "switch", как можно было бы использовать в C# или PHP.

Мой оператор switch зависит от двух ценностей, которые я использую, чтобы построить Кортеж, который я, в свою очередь, использовать в качестве ключа в словарь, который будет работать как мой "переключатель". Я буду получать значения кортежа из двух других функций (звонков базы данных), поэтому я на примере одной() и нулевой() функции.

Это шаблон кода я подумываю о том, чтобы с помощью которого я наткнулся на играть в оболочку Python:

def one():
    #Simulated database value
    return 1

def zero():
    return 0

def run():
    #Shows the correct function ran
    print "RUN"
    return 1

def walk():
    print "WALK"
    return 1

def main():
    switch_dictionary = {}

    #These are the values that I will want to use to decide
    #which functions to use
    switch_dictionary[(0,0)] = run
    switch_dictionary[(1,1)] = walk

    #These are the tuples that I will build from the database
    zero_tuple = (zero(), zero())
    one_tuple = (one(), one())

    #These actually run the functions. In practice I will simply 
    #have the one tuple which is dependent on the database information
    #to run the function that I defined before
    switch_dictionary[zero_tuple]()
    switch_dictionary[one_tuple]()

У меня нет фактического написанный код или я бы разместить его здесь, как я хотел бы знать, если этот метод является питон лучшей практики. Я до сих пор питона учусь в университете, и если это способ, что это плохая привычка, то я хотел бы, чтобы пнуть его теперь, прежде чем я выйду в реальный мир.

Обратите внимание, результат выполнения кода выше, как ожидалось, просто "бегать" и "ходить".



265
1
задан 22 октября 2011 в 06:10 Источник Поделиться
Комментарии
1 ответ

Короче говоря, словарь функций является питон аналог оператора switch.

Однако, реализация ужасная. Начало падения "переключатель" в именах переменных. Это не переключатель, это словарь. И нет никакого смысла в использовании "словаря" в имени. Сделать настоящее имя как "act_on_msg", но даже это слабо на мой взгляд.

И даже не объяснить, что вы используете словарь как переключатель в ваших комментариях. В крайнем случае, учтите, что actOnMsg[combomsg]() выполняет действие, способ просто, чтобы помочь тем, кто не привык видеть скобках в этом контексте.

3
ответ дан 22 октября 2011 в 07:10 Источник Поделиться