Skip to main content
 首页 » 编程设计

python之是否可以内联使用 with 语句

2025年05月04日12zhenyulu

例如,这里是非内联代码:

with x: 
    do(stuff) 

我可以像这样在一行中完成:

with x: do(stuff) 

但是我想知道是否有办法做这样的事情(内联):

a = [(lambda x: with x: do(stuff))(x) for x in someList] 

编辑:

详细来说,假设我有一个对象列表,每个对象都有自己的上下文。这意味着 do(stuff) 与 with x 一起使用时会有不同的行为,上面的语句将遍历该列表中的每个对象,输入它们的上下文,运行 do (stuff),然后继续下一个。

因为我试过这样做是行不通的,我想知道是否有任何方法可以做到这一点,以及如何做到这一点。

上述代码的扩展版本看起来像这样(并且有效):

a = [] 
for x in someList: 
    with x: a.append( do(stuff) ) 

请您参考如下方法:

好吧,既然你对解决方法没问题,那么more-itertools.with_iter可能是您最好的选择。

注意:它是第 3 方软件包,因此如果您还没有安装它,则需要安装它

from more_itertools import with_iter 
 
a = [do(stuff) for _ in with_iter(x)] 
#your example lacks what do and x really are/do so this comprehension is inferred 

如果您不想使用第 3 方包,那么所有 with_iter做的是:

def with_iter(context_manager): 
    with context_manager as iterable: 
        yield from iterable 

所以这很容易自己实现。