【问题标题】:Is there anything like a "void lambda" in Python?Python中有没有类似“void lambda”的东西?
【发布时间】:2014-06-05 15:53:11
【问题描述】:

也就是说,一个不接受任何输入也不返回任何内容的 lambda。

我在想一些巧妙的方法来模仿 Python 中的 switch 语句。这是我尝试的(无济于事):

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

【问题讨论】:

  • 所有的 lambdas,就像函数一样,返回 something;默认为None。只需忽略返回值。您的问题是尝试使用只能使用表达式的语句。

标签: python python-2.7 dictionary lambda void


【解决方案1】:

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

【讨论】:

  • 感谢您的澄清,但您可能需要在此处添加逗号
【解决方案2】:

对于这个用例,你最好这样做:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-19
    • 2020-03-11
    • 1970-01-01
    • 1970-01-01
    • 2010-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多