2013-04-26 83 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