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

时间:2015-02-26 16:00:20

标签: 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语句示例。是否存在不需要此变量的情况?

2 个答案:

答案 0 :(得分:2)

from threading import Lock

lock = Lock()

with lock:
    # access critical data

# continue
希望它有所帮助。

答案 1 :(得分:2)

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

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

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

对于记录,我还引用the with doc

  

with语句用于使用方法[...]包装块的执行。这允许常见的尝试...除了...最终使用模式被封装以便于重用。

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