Python 为什么with语句中的变量是可选的?
我最近学习了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)* ":"
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