? 推荐:自动化测试最佳测试策略实践分享 在本文总结了大厂常见的Python面试问题附带参考答案,希望能够帮助你在2020年求职面试中脱颖而出,找到一份高薪工作。 1、python中is和==的区别 ①Python中对象包含的三个基本要素,分别是:id(身份标识) 、type(数据类型)和value(值)。 ②‘==’比较的是value值 ③‘is’比较的是id 2、简述read、readline、readlines的区别 ①read读取整个文件 ②readline读取下一行数据 ③readlines读取整个文件到一个迭代器以供我们遍历(读取 到一个list中,以供使用,比较方便) 3、举例说明创建字典的至少两种方法

# 1dict1 = {key1:v1,key2:v2}# 2dict2 = {}dict2[key1] = v1dict2[key2] = v2# 3dict3 = dict(key1=v1,key2=v2)


4、*args,**kwargs的作用是什么?如何使用?               

                              *args和**kwargs通常使用在函数定义里,*args允许函数传入不定量个数的非关键字参数,**kwargs允许函数传入不定量个数的关键字参数 5、python中match()和search()的区别

? match()函数只检测RE是不是在string的开始位置匹配,  search()会扫描整个string查找匹配, 也就是说match()只有在0位置匹配成功的话才有返回,如果不是开始位置匹配成功的话,match()就返回none 6、一个函数接收文件夹的名称作为参数,返回该文件中所有文件的全路径,请补全缺失的代码。


def print_directry_contents(spath):import osfiles_list = os.listdir(spath)for file in files_list:print(os.path.realpath(file))


7、阅读下面的代码,写出A0,A1至An的最终值


A0 = dict(zip(('a','b','c','d','e'),(1,2,3,4,5)))A0 = {'a':1,'b':2,'c':3,'d':4,'e':5}A1 = range(10)A1 = [0,1,2,3,4,5,6,7,8,9]A2 = [i for i in A1 if i in A0]A2 = [] # 当对字典进行in判断是,判断的是keyA3 = [A0[s] for s in A0]A3 = [1,2,3,4,5]A4 = [i for i in A1 if i in A3]A4 = [1,2,3,4,5]


8、请写一段代码实现Python中list去重。


# 方法1list1 = [1,1,2,3,3,4]set1 = set(list1)list1 = list(set1)# 方法2list2 = []for i in list1:if i not in list2:list2.append(i)


9、创建一个装饰器将下面函数输入的字符串首字母大写。


def greetins(word='hi there'):return word.lower()from functools import wrapsdef start_word_upper(func):@wraps(func)def inner(*args,**kwargs):word = func(*args,**kwargs)return word.capitalize()return inner# 装饰器可以在:# 1.函数调用之前对函数参数进行操作,直接返回被装饰函数的返回值# 2.对返回值进行‘装饰’并返回(本题案例)


10、描述yield作用。

保存当前运行状态(断点),然后暂停执行,即将函数挂起 将yeild关键字后面表达式的值作为返回值返回,此时可以理解为起到了return的作用,当使用next()、send()函数让函数从断点处继续执行,即唤醒函数。 11、装饰器。

①装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。 ②功能:1.引入日志;2.函数执行时间统计;3.执行函数前预备处理;4.执行函数后清理功能;5.权限校验;6.缓存 12、你对多线程和多进程的理解。

①进程是系统进行资源分配和调度的一个独立单位,线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源; ②一个程序至少有一个进程,一个进程至少有一个线程; ③线程的划分尺度小于进程(资源比进程少),使得多线程程序的并发性高; ④进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了 程序的运行效率 ; ⑤线线程不能够独立执行,必须依存在进程中; ⑥优缺点:线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源的管理和保护;而进程正相反。 13、线程中start方法和run方法的区别?

①若调用start,则先执行主进程,后执行子进程; ②若调用run,相当于正常的函数调用,将按照程序的顺序执行 14、linux命令 grep awk sed是怎么用的?

grep:Global Regular Expression Print 15、python是怎么进行内存管理的?

①引用计数:python内部使用引用计数,来保持追踪内存中的对象,Python内部记录了对象有多少个引用,即引用计数,当对象被创建时就创建了一个引用计数,当对象不再需要时,这个对象的引用计数为0时,它被垃圾回收。 引用计数加1的情况:

  • 对象被创建:x=4
  • 另外的别人被创建:y=x
  • 被作为参数传递给函数:foo(x)
  • 作为容器对象的一个元素:a=[1,x,'33']


引用计数减少情况

  • 一个本地引用离开了它的作用域。比如上面的foo(x)函数结束时,x指向的对象引用减1。
  • 对象的别名被显式的销毁:del x ;或者del y
  • 对象的一个别名被赋值给其他对象:x=789
  • 对象从一个窗口对象中移除:myList.remove(x)
  • 窗口对象本身被销毁:del myList,或者窗口对象本身离开了作用域


②垃圾回收

  • 当内存中有不再使用的部分时,垃圾收集器就会把他们清理掉。它会去检查那些引用计数为0的对象,然后清除其在内存的空间。当然除了引用计数为0的会被清除,还有一种情况也会被垃圾收集器清掉:当两个对象相互引用时,他们本身其他的引用已经为0了。
  • 垃圾回收机制还有一个循环垃圾回收器, 确保释放循环引用对象(a引用b, b引用a, 导致其引用计数永远不为0)。


③内存池机制:在Python中,许多时候申请的内存都是小块的内存,这些小块内存在申请后,很快又会被释放,由于这些内存的申请并不是为了创建对象,所以并没有对象一级的内存池机制。这就意味着Python在运行期间会大量地执行malloc和free的操作,频繁地在用户态和核心态之间进行切换,这将严重影响Python的执行效率。为了加速Python的执行效率,Python引入了一个内存池机制,用于管理对小块内存的申请和释放。 Python提供了对内存的垃圾收集机制,但是它将不用的内存放到内存池而不是返回给操作系统。 Python中所有小于256个字节的对象都使用pymalloc实现的分配器,而大的对象则使用系统的 malloc。另外Python对象,如整数,浮点数和List,都有其独立的私有内存池,对象间不共享他们的内存池。也就是说如果你分配又释放了大量的整数,用于缓存这些整数的内存就不能再分配给浮点数。 16、什么是lambda函数?他有什么好处?

lambda函数是匿名函数;使用lambda函数能够创建小型匿名函数。这种函数得名于省略了用def声明函数的标准步骤; 例: f = lambda x,y:x+y # 求两个函数的和。x,y是参数,x+y是函数返回值 17、python中tuple和list的转换


# tuple ---> listtuple1 = (1,2,3)list1 = list(tuple1)# list ---> tuplelist2 = [1,2,3]tuple2 = tuple(list2)


18、python中如何拷贝一个对象?(赋值,浅拷贝,深拷贝的区别)

答:赋值(=),就是创建了对象的一个新的引用,修改其中任意一个变量都会影响到另一个。 浅拷贝:创建一个新的对象,但它包含的是对原始对象中包含项的引用(如果用引用的方式修改其中一个对象,另外一个也会修改改变){1,完全切片方法;2,工厂函数,如list();3,copy模块的copy()函数} 深拷贝:创建一个新的对象,并且递归的复制它所包含的对象(修改其中一个,另外一个不会改变){copy模块的deep.deepcopy()函数} 19、介绍一下except的用法和作用?


try:passexcept Exception as e:print(e)finally:pass


捕获try except中间代码发生的异常,如果发生异常执行except的代码,不管是否发生异常都执行finally中的代码 except可以有0个或多个,如果有多个从上到下依次根据异常类型匹配,匹配某个Exception这执行对应的except中代码 20、用python匹配HTML tag的时候,<.>和<.>有什么区别?

<.>匹配结果是:HTML tag; 
  <.>匹配到的结果是:""。?表示非贪婪,搜到符合的结果既返回