公众号新增加了一个栏目,就是每天给大家解答一道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 somethingfinally: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
如果对于参考答案有不认同的,大家可以在评论区指出和补充,欢迎留言!
更多题目:
1-40、Python面试1-40题汇总
41、说说Python中的正则表达式?42、Python如何实现斐波那契数列?43、说说Python 中 is 和 == 的区别?44、说说Python如何实现杨辉三角?45、说说Python中变量的作用域?46、Python打印九九乘法表有几种方式?47、Python中列表常见的方法有哪些?48、说说Python中yield的用法?49、说说Python中元类是什么?50、Python中几种常见的排序算法?51、说说Python中闭包是什么?52、read、readline和readlines的区别?关注小猿公众号,每天学习一道题