了解Python的“ with”语句

发布于 2021-01-29 19:11:25

我试图了解这些之间是否存在差异,以及该差异可能是什么。

选项一:

file_obj = open('test.txt', 'r')

with file_obj as in_file:
    print in_file.readlines()

选项二:

with open('test.txt', 'r') as in_file:
    print in_file.readlines()

我知道,对于选项一,file_objwith块之后处于闭合状态。

关注者
0
被浏览
40
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    我不知道为什么没有人提到这一点,因为这是工作方式with的基础。与Python中的许多语言功能一样,with在后台调用特殊方法,这些方法已经为内置Python对象定义,并且可以由用户定义的类覆盖。在with特定情况下(和上下文管理器),方法是__enter____exit__

    请记住,在Python中, 所有东西都是对象
    -甚至是文字。这就是为什么您可以做类似的事情'hello'[0]。因此,是否直接使用由以下文件返回的文件对象并不重要open

    with open('filename.txt') as infile:
        for line in infile:
            print(line)
    

    或先使用其他名称存储(例如,将长行分开):

    the_file = open('filename' + some_var + '.txt')
    with the_file as infile:
        for line in infile:
            print(line)
    

    因为最终的结果是the_fileinfile和返回值open都指向同一个对象,这就是with被调用__enter____exit__方法上。内置文件对象的__exit__方法是关闭文件的方法。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看