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

标签 python with-statement

最近学习了python中的with语句及其用法,主要来自文章Understanding Python's "with" statementofficial documentation for with statement .

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

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 语句的示例。在某些情况下这个变量是不必要的吗?

最佳答案

是的,您可以在此答案中找到其中几个:What is the python "with" statement designed for?

我能想到的最直接的是线程锁(也在上一个链接中列出):

lock = threading.Lock()
with lock:
    # Critical section of code

为了记录,我还要引用 the with doc :

The with statement is used to wrap the execution of a block with methods [...]. This allows common try...except...finally usage patterns to be encapsulated for convenient reuse.

由于 try... except...finally 中并不总是需要变量,因此 with 语句中也不一定需要目标变量。

关于python - 为什么 with 语句中变量是可选的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28747063/

相关文章:

python - 为什么分配给一个空列表而不是一个空元组是有效的?

python - 用 with 语句关闭后重新打开 sys.stdout

kotlin - 如何将 Kotlin 的 `with` 表达式用于可空类型

python - Python中的条件语句

python - 通过导入一个简单的函数来停止日志记录?

python - 从命令行执行python脚本: error with imports

python - 写入 CSV 文件,其中值是字典,并且值需要与键位于同一行

Python 2.7 Tkinter 和 ftplib

python - with 语句 - Python 2.5 的反向移植

python - 返回用 open 打开的文件句柄?