2013-04-26 410 views
3

Python的with關鍵字是如何在lambda函數中表達的?考慮以下幾點:Python「with」關鍵字在Lambda函數中

cat = lambda filename: with open(filename, 'r') as f: return f.read() 
+0

使用CPython,執行'open(filename).read()'行後立即關閉文件,因爲文件對象立即被垃圾收集。這是一個表達式,可以在lambda中使用。但是這是糟糕的風格,並不是一個好的lambda用例,使用'def'更好。 – wim 2013-04-26 03:33:33

+0

感謝您的意見。那麼對於這個例子,只要在需要的地方寫'open(filename).read()'就可以了。 – 2013-04-26 03:40:55

+0

you _could_,它與_would_不同:) – wim 2013-04-26 03:45:31

回答

5

lambda_form ::= "lambda" [parameter_list]: expression

你不能,with是一個語句,lambda只返回表達式:

def cat (filename): 
    with open(filename, 'r') as f: 
     return f.read() 

一個在拉姆達實施失敗的嘗試。

+0

感謝您的答案。是否有與'if'相同的方式替代'with'?或者是最實用的標準功能? – 2013-04-26 03:35:25

+0

@StephenNiedzielski一個標準函數,'lambda's不是爲此構建的,Guido也鄙視它們。 – jamylak 2013-04-26 03:36:48

+0

由於這樣的原因,人們試圖使用'lambda'代替普通函數時,他們看起來不太可讀。它們在某些情況下很有用,例如'itertools.dropwhile',但儘可能不要使用它們。 – jamylak 2013-04-26 03:43:36