【发布时间】:2019-08-01 18:19:11
【问题描述】:
例如,这里的代码不是内联的:
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) )
【问题讨论】:
-
不清楚你想在这里做什么,但可能你需要使用
map? -
@DavidZemens 添加了更多信息
-
最好能提供
x和do的示例。 -
@DavidZemens 因为
x.__enter__()改变了环境,从而改变了do_stuff()返回的内容。或者 OP 将其误写为with x as y: do_stuff(y)之类的。
标签: python python-3.x inline