Python中有类似“空lambda”的东西吗?

5 投票
2 回答
5769 浏览
提问于 2025-04-18 08:44

也就是说,一个不接受任何输入也不返回任何结果的lambda函数。

我在想一些聪明的方法来模拟Python中的switch语句。以下是我尝试过的(但没有成功):

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

2 个回答

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

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

如果你想在Python 3.x中使用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]()

撰写回答