python面试真题整理
Day1
python中is和==的区别
在python中,一个对象有三个要素,value,id和type。
“==”主要判断的是两个对象的value是否相同,
“is”也叫同一性运算符,会判断两者的ID是否相同。
简述read、readline和readlines的区别
read:将文件内内容全部读取输出;
readline:读取文件内容的一行;
readlines:读取文件的所有内容,按行返回一个列表。
举例说明创建字典的至少两种方法
- 直接采用dict={key:value}创建
- 内建方法fromkeys。dict = {}.fromkeys((key1,key2),value),这样创建出来的字典适合字典中的key有相同的value值,默认为None。
- zip间接创建userinfo = zip.([“username”,“Id”],[“lalala”,“123”]),dict(userinfo),即可创建字典。
*args,**kwargs的作用?如何使用?
当函数的参数不确定时,可以使用args 和kwargs,args 没有key值,kwargs有key值。
当我们不知道向函数传递多少参数时,比如我们向传递一个列表或元组,我们就使用*args
当我们不知道该传递多少关键字参数时,使用**kwargs来收集关键字参数
python中match()和search()的区别?
match()函数只检测字符串开头位置与所检测的string是否匹配,匹配成功才会返回结果,否则返回None;
search()函数会在整个字符串内查找模式匹配,只到找到第一个匹配然后返回一个包含匹配信息的对象,该对象可以通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None。
Day2
解释一下python中的三元表达式
if_suite if expression1 else else_suite
expression1 :判断条件
if_suite:True的值
else_suite:False的值
Python中如何实现多线程?
创建Thread的实例,传递给它一个函数
创建Thread的实例,传递给它一个可调用的类实例
派生Thread的子类,并创建子类的实例
使用线程池
解释继承
继承描述的是事物之间的所属关系,当我们定义一个class的时候,可以从某个现有的class继承,父类的属性、方法,会被继承给子类。
什么是Flask?
Flask 是 Python 编写的一款轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2。Flask 使用 BSD 授权。其中两个环境依赖是 Werkzeug 和 jinja2,这意味着它不需要依赖外部库。正因如此,我们将其称为轻量级框架。
如何在Python中管理内存?
Python采用的是引用计数机制来管理分配的内存。Python 的每个对象都有一个引用计数,这个引用计数表明了有多少对象在指向它。当这个引用计数为 0 时,释放该对象的内存。为了解决循环引用的问题,Python提供了“标记-清除”法,用于释放循环引用的对象。
Day3
python2和python3的range(100)的区别。
在python2中,range(100)返回的是一个列表,
在python3中,range(100)返回的是一个可迭代对象。
一句话解释什么样的语言能够用装饰器。
函数可以作为参数传递的语言可以使用装饰器
python内建数据类型有哪些?
python内建数据类型有整形(int)、浮点型(float)、复数(complex)、布尔(bool)、字符串(str)、列表(list)、元组(tuple)、集合(set)、字典(dict)、
简述面向对象中__new__和__init__的区别?
__new__是在创建对象之前进行的动作,所接受的参数是cls,负责对象的创建;
__init__是在对象创建之后的动作,完善对象的属性,所接受的参数是self。
对象的生成是在new中完成的。
简述with方法打开处理文件帮我们做了什么?
with方法打开文件,可以在我们对文件操作完成后,自动关闭文件,保证文件的安全性。
Day4
大数据的文件读取
① 利用生成器generator;
②迭代器进行迭代遍历:for line in file
迭代器和生成器的区别
可迭代对象:可以直接作用于for循环的对象;
迭代器就是用于迭代操作的对象,迭代器都是可迭代对象。简单来说,迭代器就是可以被next()函数调用并不断返回下一个值的对象;
生成器的本质也是一个迭代器,与迭代器的区别在与yield,生成器在返回数据是需要使用yield。
装饰器的作用和功能
装饰器的本质就是一个函数,只不过装饰器的参数不像普通函数那样,装饰器的参数是一个函数,它的作用就是它可以让其他函数在不需要修改代码的前提下增加额外的功能,装饰器的返回值也是一个函数对象。在开发中,我们需要遵循开放封闭原则,对于已经实现的功能,我们便不再对其进行修改,这时就需要装饰器来对其进行扩展。
简单谈下GIL
GIL(Global Interperter Lock)即全局解释器锁,GIL是Python解释层面的锁,解决解释器中多个线程的竞争资源问题(多个子线程在系统资源竞争时,都在等待对象某个部分资源解除占用状态,结果谁也不愿意先解锁,然后互相等着,程序无法执行下去)。
如何提高python的运行效率
- 优化循环
- 多使用pthon中已经封装好的模块
- 使用较新的Python版本
Day5
列表和元组有什么不同?
首先,列表和元组都是可以存储任意数据类型的集合,
但元组是不可变的。
解释Python中的help()函数和dir()函数。
help函数是一个内置函数,用于查看函数或模块用途的详细说明。
dir()函数时python的内置函数,dir()函数不带参数时,返回当前范围内的变量、方法和定义的类型列表,带参数时,返回参数的属性、方法列表
当退出Python时是否会释放所有内存分配?
答案是否定的。那些具有对象循环引用或者全局命名空间引用的变量,在 Python 退出是往往不会被释放。
什么是猴子补丁?
属性在运行时的动态替换,叫做猴子补丁。
解释一下*args和**kwargs。
见Day1*args,**kwargs的作用?如何使用?