Python中“ with”语句的用途是什么?

时间:2019-04-02 11:24:34

标签: python with-statement

在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.(注意点)时,会出现一个方法和属性列表,这使得键入obj1.launch_method1()之类的东西非常容易。 ,obj1.launch_method2(),...

因此,从程序员的角度来看,使用with语句似乎没有优势。

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

1 个答案:

答案 0 :(得分:2)

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

例如,如果您需要使用文件,则通常必须先打开文件,然后记得关闭它。 with open语句可以为您解决这个问题。

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

输入方法将打开文件退出,将其关闭。

现在看来,这似乎是付出很大的努力以获取少量收益,但考虑一个存在大量构建和崩溃的系统。您可以轻松地构建自己的上下文管理器。

例如打开套接字,握手,身份验证和授权都可以进入 enter 方法,然后将其全部分解为 Exit 方法

然后,它就像在需要时使用上下文一样简单