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 方法
那么就是在需要的时候使用上下文一样简单
在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 方法
那么就是在需要的时候使用上下文一样简单