Python中的"with"语句有什么用?

What's the use of the "with" statement in Python?

在Python编程时,有时我需要启动函数和对象方法,像这样:

obj1.launch_method1(); // object method
do_something();        // general function
obj1.launch_method2(); // object method

使用 with 语句,这变成:

with obj1:
  launch_method1();
  do_something();
  launch_method2();

在我看来,这会造成混淆,因为下一个程序员可能会错误地认为 do_something() 是对象方法而不是一般函数。

最重要的是,大多数 IDE 都有智能感知,因此当您键入 obj1.(注意点)时,会出现一个方法和属性列表,这使得键入 [=17 之类的内容变得非常容易=], obj1.launch_method2(), ...

所以,从程序员的角度来看,使用with语句似乎没有什么优势。

但是,with 语句似乎启动了 __enter____exit__ 调用,这似乎创建了新的上下文。那些电话是什么?这是什么意思? with 语句的用法有什么区别吗?如果是,是哪一个?

with 语句是上下文管理器。这负责构建和分解资源。

例如,如果您需要使用一个文件,传统上您必须打开该文件,然后记得关闭它。 with open 语句会为您解决这个问题。

with open(“file.txt”) as file:  
    data = file.read() #Context of the file open

enter 方法打开文件 exit 关闭文件。

现在这似乎是为了小利而付出的大量努力,但请考虑一个系统,其中有大量的构建和分解。您可以轻松构建自己的上下文管理器。

例如打开套接字、握手、身份验证和授权都可以进入 enter 方法并将其再次分解为 Exit 方法

那么就是在需要的时候使用上下文一样简单