Я знаю, что вы можете использовать словарь в качестве альтернативы оператору switch, например:
def printMessage(mystring):
# Switch statement without a dictionary
if mystring == "helloworld":
print "say hello"
elif mystring == "byeworld":
print "say bye"
elif mystring == "goodafternoonworld":
print "good afternoon"
def printMessage(mystring):
# Dictionary equivalent of a switch statement
myDictionary = {"helloworld": "say hello",
"byeworld": "say bye",
"goodafternoonworld": "good afternoon"}
print myDictionary[mystring]
Однако, если используются условия, отличные от равенства (==), которые возвращают true из false, они не могут быть отображены так легко:.
if i > 0.5:
print "greater than 0.5"
elif i == 5:
print "it is equal to 5"
elif i > 5 and i < 6:
print "somewhere between 5 and 6"
Вышеуказанное не может быть напрямую преобразовано в пару слов-словаря слова:
# this does not work
mydictionary = { i > 0.5: "greater than 0.5" }
Лямбда может использоваться, поскольку она хешируется, но единственный способ получить полученную строку из карты - передать тот же лямбда-объект в словарь, а не когда оценка лямбда истинна:
x = lambda i: i > 0.5
mydictionary[x] = "greater than 0.5"
# you can get the string by doing this:
mydictionary[x]
# which doesnt result in the evaluation of x
# however a lambda is a hashable item in a dictionary
mydictionary = {lambda i: i > 0.5: "greater than 0.5"}
Кто-нибудь знает о методе или методе создания сопоставления между оценкой лямбда и возвращаемым значением? (это может быть похоже на сопоставление шаблонов в функциональном языке)