说说Python中with的用法?

简介: 公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助!

小猿会从最基础的面试题开始,每天一题。如果参考答案不够好,或者有错误的话,麻烦大家可以在留言区给出自己的意见和讨论,大家是要一起学习的 。


废话不多说,开始今天的题目:


问:说说Python中with的用法?

答:Python 文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的。但是由于文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用。所以,为了保证无论是否出错都能正确地关闭文件,我们可以使用try ... finally来实现 。如下面代码所示:

try:
    f = open('xxx')
except:
    print 'fail to open'
    exit(-1)
try:
    do something
except:
    do something
finally:
     f.close()


但是上面代码太冗长了。所以有with替代了之前在python里使用try...finally来做清理工作。除了有更优雅的语法,with还可以很好的处理上下文环境产生的异常。如下面代码所示:

with open("xxx.txt") as file:
print(file.read())

Python推荐使用with方法来读取文件,防止程序员打开文件后忘记关闭文件。


不过with是怎么实现的呢?


  • with可操纵的对象必须有__enter__和__exit__两个方法。
  • with后面的对象在求值后,对象的__enter__()方法被调用。这将把with后面紧紧跟着的对像赋值给as后面的变量。
  • with下面的语句执行好以后,将调用前面返回对象的__exit__()方法。


下面例子可以具体说明with如何工作:

class Sample:
  def __enter__(self):
    print("In __enter__()")
    return "Foo"
  def __exit__(self,type, value, trace):
    print("In __exit__()")
def get_sample():
  return Sample()
with get_sample() as sample:
  print("sample:" + sample)
输出结果:
  In__enter__()
  sample: Foo
  In__exit__()

1. __enter__()方法被执行

2. __enter__()方法返回的值 - ”Foo”赋值给变量’sample’

3. 执行代码块,打印变量”sample”的值为 “Foo”

4. __exit__()方法被调用

文末推荐文章链接:

https://www.cnblogs.com/wanglei-xiaoshitou1/p/9238275.html

如果对于参考答案有不认同的,大家可以在评论区指出和补充,欢迎留言!

相关文章
|
27天前
|
Python
python基本用法
【9月更文挑战第5天】python基本用法
38 7
|
4月前
|
人工智能 算法 Python
【随手记】python的heapq库的基本用法
【随手记】python的heapq库的基本用法
51 1
|
4天前
|
Python
Python中正则表达式(re模块)用法详解
Python中正则表达式(re模块)用法详解
13 2
|
17天前
|
人工智能 数据挖掘 开发者
Python用法
Python用法
23 10
|
4月前
|
Python
掌握 Python3 函数高级用法:详解与应用
掌握 Python3 函数高级用法:详解与应用
|
4月前
|
Python
掌握Python中循环语句的精髓:基础用法与高级技巧
掌握Python中循环语句的精髓:基础用法与高级技巧
|
3天前
|
Python
Python变量用法——单下划线变量名_ 原创
Python变量用法——单下划线变量名_ 原创
14 0
|
3天前
|
Python
Python变量用法——变量解包
Python变量用法——变量解包
13 0
|
2月前
|
Python
Python 中 help() 和 dir() 函数的用法
【8月更文挑战第29天】
27 5
|
15天前
|
数据处理 开发者 Python
探索Python中的列表推导式在Python编程中,列表推导式是一种简洁而高效的方法,用于从现有的列表创建新列表。本文将深入探讨列表推导式的用法、优势以及一些实际应用示例。
列表推导式是Python提供的一种强大工具,它允许开发者以更简洁的语法快速生成列表。通过结合循环和条件语句,列表推导式能够简化代码结构,提高开发效率。本文详细介绍了列表推导式的基本用法,并通过实例展示了其在数据处理、转换和过滤中的广泛应用。
16 0