2014-06-05 137 views
2

也就是說,一個不接受任何輸入且不返回任何內容的lambda表達式。Python中有沒有類似「void lambda」的東西?

我想到了一些聰明的方法來模仿Python中的switch語句。這是我試圖(無濟於事):

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

http://stackoverflow.com/questions/60208/replacements-for-switch-statement-in-python – Pavel

+0

所有lambda表達式,如函數,返回*東西*;默認值是'None'。只需忽略返回值。你的問題是試圖使用只有表達式可以使用的語句。 –

回答

5

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可以在裏面lambda表達式中使用,因爲它是一個功能:

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

感謝您的澄清,但您可能需要在此添加逗號 –

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)() 
相關問題