Большое спасибо за ответ. Это было действительно полезно. Если бы я мог отметить два ответа как правильные, я бы тоже отметил ваш. Как это я не могу :(. Во всяком случае, я очень ценю вашу помощь.

но я прочитал вопросы, которые рекомендуют не использовать операторы switch-case на языках, которые его поддерживают. Что касается Python, я видел несколько замен регистров, таких как:

Использование словаря (много вариантов)Использование кортежаИспользование функции декоратора (http://code.activestate.com/recipes/440499/)Использование полиморфизма (рекомендуемый метод вместо проверки типов объектов)Используя лестницу if-elif-elseКто-то даже рекомендовал шаблон Visitor (возможно, внешний)

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

Вот конкретная проблема:
(1)

def _setCurrentCurve(self, curve):
        if curve == "sine":
            self.currentCurve =  SineCurve(startAngle = 0, endAngle = 14,
            lineColor = (0.0, 0.0, 0.0), expansionFactor = 1,
            centerPos = (0.0, 0.0))
        elif curve == "quadratic":
            self.currentCurve = QuadraticCurve(lineColor = (0.0, 0.0, 0.0))

Этот метод вызываетсякварты-слот в ответ на выбор нарисовать кривую из меню. Вышеуказанный метод будет содержать в общей сложности 4-7 кривых после завершения подачи заявки. Оправдано ли в этом случае использование одноразового словаря? Поскольку самый очевидный способ сделать это - if-elif-else, я должен придерживаться этого? Я также рассмотрел использование ** kargs здесь (с помощью друзей), так как все классы кривой используют ** kargs ...

(2)
Этот второй кусок кода являетсякварты-слот это вызывается, когда пользователь изменяет свойство кривой. В основном слот берет данные из графического интерфейса (spinBox) и помещает их в переменную экземпляра соответствующего класса кривой. В этом случае у меня опять тот же вопрос - я должен использовать дикт?

Вот вышеупомянутый слот

def propertyChanged(self, name, value):
    """A Qt slot, to react to changes of SineCurve's properties."""
    if name == "amplitude":
        self.amplitude = value
    elif name == "expansionFactor":
        self.expansionFactor = value
    elif name == "startAngle":
        self.startAngle = value
    elif name == "endAngle":
        self.endAngle = value  

Для справки вот код для подключения к вышеуказанному слоту -

def _connectToPage(self, page):
    for connectionData in page.getConnectibles():
        self.connect(connectionData["object"],
                    SIGNAL(connectionData["signal"]),
                    lambda value, name = connectionData["property"]:\
                        self.currentCurve.propertyChanged(name, value))
        self.connect(connectionData["object"],
                    SIGNAL(connectionData["signal"]),
                    self.hackedDisplayArea.update) 

Запись - self.endAngle и т. Д. Инициализируются в конструкторе.

Насколько я знаю, причина выбора диктата - быстрый поиск. Когда это оправдано? когда у меня 100 дел или больше? Является ли хорошей идеей продолжать собирать и выбрасывать словарь при каждом вызове функции? Если я создаю диктат для этой цели вне функции, должен ли я проверить, нужно ли это где-нибудь? Что произойдет, если это не нужно в другом месте?

Мой вопрос: что такое лучшая практика, если она есть? Какой самый лучший / самый элегантный способ идти о вещах? Иными словами, когда использоватьесли-Элиф-то еще, когда использовать каждый из других вариантов?

Ответы на вопрос(2)

Ваш ответ на вопрос