常见Python面试题-附答案,


 

 

前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

在本文总结了大厂常见的Python面试问题附带参考答案,希望能够帮助你在2020年求职面试中脱颖而出,找到一份高薪工作。

 

1、python中is和==的区别

①Python中对象包含的三个基本要素,分别是:id(身份标识) 、type(数据类型)和value(值)。

②‘==’比较的是value值

③‘is’比较的是id

 

2、简述read、readline、readlines的区别

①read读取整个文件

②readline读取下一行数据

③readlines读取整个文件到一个迭代器以供我们遍历(读取 到一个list中,以供使用,比较方便)

 

3、举例说明创建字典的至少两种方法

# 1
dict1 = {key1:v1,key2:v2}
# 2
dict2 = {}
dict2[key1] = v1
dict2[key2] = v2
# 3
dict3 = 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、一个函数接收文件夹的名称作为参数,返回该文件中所有文件的全路径,请补全缺失的代码。

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

 

 

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

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

 

 

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

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

 

 

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

def greetins(word='hi there'):
return word.lower()
from functools import wraps
def 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 ---> list
tuple1 = (1,2,3)
list1 = list(tuple1)
# list ---> tuple
list2 = [1,2,3]
tuple2 = tuple(list2)

 

 

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

答:赋值(=),就是创建了对象的一个新的引用,修改其中任意一个变量都会影响到另一个。

浅拷贝:创建一个新的对象,但它包含的是对原始对象中包含项的引用(如果用引用的方式修改其中一个对象,另外一个也会修改改变){1,完全切片方法;2,工厂函数,如list();3,copy模块的copy()函数}

深拷贝:创建一个新的对象,并且递归的复制它所包含的对象(修改其中一个,另外一个不会改变){copy模块的deep.deepcopy()函数}

 

19、介绍一下except的用法和作用?

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

 

捕获try except中间代码发生的异常,如果发生异常执行except的代码,不管是否发生异常都执行finally中的代码

except可以有0个或多个,如果有多个从上到下依次根据异常类型匹配,匹配某个Exception这执行对应的except中代码

 

20、用python匹配HTML tag的时候,<.*>和<.*?>有什么区别?

<.*>匹配结果是:HTML tag;

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

 

不管你是零基础还是有基础都可以获取到自己相对应的学习礼包!包括Python软件工具和2020最新入门到实战教程。加群695185429即可免费获取,资料在群文件里放着哟~

相关内容

    暂无相关文章

评论关闭