python面试题:每日十题

醉酒当歌 提交于 2020-12-29 09:26:36

点击上方色文字一键关注

点击上方“python学习专栏”,选择“置顶公众号”

干货、福利第一时间送达!


今天是2020.3.5日


第一题 、== 和 is 的区别?


== 比较的是值,is比较的是值和引用(对象内存空间)


比如:

>>> a = 123>>> b = 123>>> a == bTrue>>> a is bTrue>>> id(a)9670848>>> id(b)9670848


只要是不可变类型变量(数值型,字符串),只要值一样,对象内存空间也一样。

可变类型变量的is 和 ==


>>> c = [1,2,3]>>> d = [1,2,3]>>> c == dTrue>>> c is bFalse>>> id(c)140470599331072>>> id(d)140470599331200


对于可变类型,每一个变量的内存空间都是不一样的。



第二题、Python中单下划线_foo与双下划线__foo与__foo__的成员理解


  1、 _foo 不能直接用于’from module import *’

2、__foo解析器用_classname__foo来代替这个名字,以区别和其他类相同的命名

3、__foo__代表python里特殊方法专用的标识




第三题、__new__和__init__的区别?


1、__new__是一个静态方法,而__init__是一个实例方法

2、__new__方法会返回一个创建的实例,而__init__什么都不返回

3、只有在__new__返回一个cls的实例时,后面的__init__才能被调用

4、当创建一个新实例时调用__new__,初始化一个实例时用__init__




第四题sinstanceissubclass的作用?


1、sinstance(object,classinfo),用于判断object是否是classinfo的一个实例,或者object是否是classinfo类的子类的一个实例,如果是返回True.

2、issubclass(class,classinfo),用于判断class是否是classinfo类的子类,如果是返回True.



第五题、以下Python2和Python3的说法正确的有(ABC)

      A、Python3使用 print 必须要以小括号包裹打印内容

      B、Python2中使用ascii编码,Python3中使用utf-8编码

      C、Python2中是raw_input()函数,Python3中是input()函数

       D、Python2中range(1,10)返回列表,Python3中返回迭代器


D答案、python2中返回是列表,在python3中返回是range类型,并不是迭代器



第六题、如何理解 python的GIL?

首先需要明确的一点是GIL并不是Python的特性,它是在实现Python解析器(CPython)时所引入的一个概念


为什么会与GIL,为了利用多核,Python开始支持多线程。而解决多线程之间数据完整性和状态同步的最简单方法自然就是加锁。 于是有了GIL这把超级大锁,而当越来越多的代码库开发者接受了这种设定后,他们开始大量依赖这种特性(即默认python内部对象是thread-safe的,无需在实现时考虑额外的内存锁和同步操作。


GIL 的全程为 Global Interpreter Lock ,意即全局解释器锁。
在 Python 语言的主流实现 CPython 中,GIL 是一个货真价实的全局线程锁,在解释器解释执行任何 Python 代码时,都需要先获得这把锁才行,在遇到 I/O 操作时会释放这把锁。如果是纯计算的程序,没有 I/O 操作,解释器会每隔 100 次操作就释放这把锁,让别的线程有机会执行,这个次数可以通过sys.setcheckinterval。如果不释放这把锁其他的程序会处于等待状态。



第七题简述with方法打开处理文件帮我我们做了什么?


打开文件在进行读写操作时可能会出现一些异常状况,如果按照常规的file.open写法,我们需要try,except,finally,做异常判断,并且文件最终不管遇到什么情况,都要执行finally的file.close()关闭文件

with方法帮我们实现了finally中file.close()操作 ,如下



第八题避免转义给字符串加哪个字母表示原始字符串

            r,表示需要原始字符串,不转义特殊字符



第九题Python中断言方法举例

 assert()方法,断言成功,则程序继续执行;断言失败,则程序报错




第十题、怎么将一个列表类型转换为 迭代器

>>> a = [1,2,3,4,5,6]>>> a = iter(a)>>> next(a)1>>> a = [1,2,3,4,5,6]>>> a = a.__iter__()>>> a.__next__()1


关注我,每天接收 面试题



扫描识别二维码

带你领略不同python



本文分享自微信公众号 - python学习专栏(ghjk7619)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!