【发布时间】:2018-12-26 20:16:15
【问题描述】:
是否可以在 Python 匿名函数中使用 with 语句?例如,我有一个将1 写入文件的函数:
def write_one(filename):
with open(filename, 'wt') as fp:
fp.write('1')
但是这个函数要组织在一个字典中:
my_functions = {
....
}
显然我可以写这个语句来将这个函数添加到字典中:
my_functions['write_one'] = write_one
但问题是名称write_one 仍然存在于当前范围内。如何在不污染当前命名空间的情况下引入匿名函数?
对于简单的功能,我可以使用lambda。对于稍微复杂的函数,我可以返回一个元组来执行多个语句(准确地说是表达式)。但是我没有找到巧妙地使用lambda 以便它可以与with 语句一起使用的方法。如果这是不可能的,它在文档中的什么地方这么说?
del write_one 的解决方案对我来说看起来不太好。我不希望在当前命名空间中引入这个名称。
总之,我想要的是这样的:
my_functions['write_one'] = def(filename):
with open(filename, 'wt') as fp:
fp.write('1')
这对于 Python 的基于缩进的规则有点尴尬,我知道。但它确实发挥了作用。
【问题讨论】:
-
不,不是。
lambda表达式只能包含表达式,不能包含语句。 -
@juanpa.arrivillaga
lambda是在 Python 中构造匿名函数的唯一方法吗?我说的是匿名函数而不是lambda。 -
是的。我很少使用
lambda表达式,只有在我超级懒惰的时候,或者对于我传递给像map这样的高阶函数的非常简单的一次性操作@ -
@juanpa.arrivillaga 那么文档在哪里说 lambda 是构造匿名函数的唯一方法?
-
是的。或者你可以相信有语言经验的人。由你决定。