Python 为什么with语句中的变量是可选的?

Python 为什么with语句中的变量是可选的?,python,with-statement,Python,With Statement,我最近学习了python中的“with”语句及其用法,主要是从文章和 最常用的例子对我来说是可以理解的 with open("x.txt") as f: data = f.read() do something with data 好的,我们打开文件x.txt,用它执行一些任务,它会自动关闭。f变量用于读取文件和执行其他任务 但在官方文档中,表达式后面的目标变量是可选的: with_stmt ::= "with" with_item ("," with_item)* ":"

我最近学习了python中的“with”语句及其用法,主要是从文章和

最常用的例子对我来说是可以理解的

with open("x.txt") as f:
    data = f.read()
    do something with data
好的,我们打开文件
x.txt
,用它执行一些任务,它会自动关闭。
f
变量用于读取文件和执行其他任务

但在官方文档中,表达式后面的目标变量是可选的:

with_stmt ::=  "with" with_item ("," with_item)* ":" suite
with_item ::=  expression ["as" target]
我没有发现在没有目标变量的情况下使用with语句的任何示例。是否存在不需要此变量的情况

from threading import Lock

lock = Lock()

with lock:
    # access critical data

# continue

希望有帮助。

是的,你可以在下面的答案中找到一些:

我能想到的最简单的方法是线程锁(也在前面的链接中列出):

为了记录在案,我还要引用:

with语句用于用方法[…]包装块的执行。这允许封装常见的try…except…finally使用模式以方便重用


由于在
try中不总是需要变量,除了…finally
,所以在
with
语句中也不一定需要目标变量。

multiprocessing.Lock就是一个例子:我曾经写过一个
with silented_output():
语句,它将所有
stdout
消息重定向到dev/null<代码>将沉默的_输出()作为x:没有多大意义,因为我不需要对x做任何事情。另请参见。好的,我没有注意到这个问题已经得到了回答。对不起
lock = threading.Lock()
with lock:
    # Critical section of code