python简述题_常见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实战演练、PDF电子文档、面试集锦、学习资料等。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值