2013-03-11 65 views
1

的Python 2.7.1如何lambda函數內執行任務

我想明白,爲什麼我不能做這似乎是一個明智的做法

def do_stuff(): 
    # return a function which takes a map as an argument and puts a key in there 
    f = lambda map: map['x'] = 'y' #compilation error 
    return f 

x = do_stuff() 
map = {} 
x(map) 
print map['x'] 

我可以在以下有lambda函數是有點簡單的東西像f = lambda map: os.path.exists但我不能讓它來改變地圖。有人能告訴我如何實現這一目標嗎?如果這是不可能的,爲什麼?

回答

15

你不能在表達式中使用賦值,它是一個語句。 A lambda只能包含一個表達式,並且不包含語句。

可以分配到地圖,雖然,通過使用operator.setitem() function代替:

import operator 

lambda map: operator.setitem(map, 'x', 'y') 
+1

其實這是酷! – 2013-03-11 15:53:41

+1

或'map .__ setitem __('x','y')' – newacct 2013-03-11 20:33:45

+2

@newacct:是的,但它直接使用特殊的鉤子方法;更好地使用API​​方法。 :-) – 2013-03-11 20:34:56