Python中有什么类似“void lambda”的东西吗?

时间:2014-06-05 15:53:12

标签: python python-2.7 dictionary lambda void

也就是说,一个没有输入并且什么都不返回的lambda。

我在考虑用Python模仿switch语句的聪明方法。这是我尝试的(无济于事):

statement = {
    "Bob": lambda: print "Looking good, Bob!",
    "Jane": lambda: print "Greetings, Jane!",
    "Derek": lambda: print "How goes it, Derek?"
}[person]()

2 个答案:

答案 0 :(得分:7)

lambda函数的内容必须是单个表达式;不允许任何陈述。而且,print是Python 2.x中的一个语句。这意味着你不能在lambda中使用它。

如果您想使用Python 3.x print function,可以从__future__导入它,如下所示:

# Add this line to the top of your script file
from __future__ import print_function

现在,print可以在lambdas中使用,因为它是一个函数:

statement = {
    "Bob": lambda: print("Looking good, Bob!"),
    "Jane": lambda: print("Greetings, Jane!"),
    "Derek": lambda: print("How goes it, Derek?")
}[person]()

答案 1 :(得分:1)

对于这个用例,你可能会做得更好:

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 )()