即没有输入参数且不返回任何内容的lambda表达式。
我在思考如何在Python中模仿switch语句的巧妙方法。以下是我尝试过但失败了的方法:
statement = {
"Bob": lambda: print "Looking good, Bob!",
"Jane": lambda: print "Greetings, Jane!",
"Derek": lambda: print "How goes it, Derek?"
}[person]()
即没有输入参数且不返回任何内容的lambda表达式。
我在思考如何在Python中模仿switch语句的巧妙方法。以下是我尝试过但失败了的方法:
statement = {
"Bob": lambda: print "Looking good, Bob!",
"Jane": lambda: print "Greetings, Jane!",
"Derek": lambda: print "How goes it, Derek?"
}[person]()
print
是一个语句。这意味着你不能在lambda内使用它。print
函数,可以像这样从__future__
导入:# Add this line to the top of your script file
from __future__ import print_function
print
是一个函数,所以它可以在lambda中使用:statement = {
"Bob": lambda: print("Looking good, Bob!"),
"Jane": lambda: print("Greetings, Jane!"),
"Derek": lambda: print("How goes it, Derek?")
}[person]()
针对这种情况,你最好做:
print {
"Bob": "Looking good, Bob!",
"Jane": "Greetings, Jane!",
"Derek": "How goes it, Derek?"
}[person]
或者
statement = {
"Bob": "Looking good, Bob!",
"Jane": "Greetings, Jane!",
"Derek": "How goes it, Derek?"
}[person]
print statement
对于更复杂的类似 switch
的应用程序,当然可以使用 dict
来保存函数引用。
我也喜欢将函数名组合成字符串:
class Greeter(object):
...
def _greet_Bob(self): ...
def _greet_Jane(self): ...
def _greet_Derek(self): ...
def greet(self,person):
getattr( self, "_greet_"+person )()
None
。可以忽略返回值。您遇到的问题是尝试在只能使用表达式的地方使用语句。 - Martijn Pieters