python高级面试,python高并发面试题

  python高级面试,python高并发面试题

  本文主要介绍Python中16个高频面试问题的相关信息,帮助大家复习基础知识,了解面试套路。对你的学习或者工作有一定的参考价值,有需要的朋友可以参考一下。

  00-1010(一)Python如何管理内存?(2)什么是函数?有什么好处?(3)如何在Python中实现元组和列表的转换?(4)请写一个Python代码,删除列表中的重复元素。(5)对编程进行排序,然后从最后一个元素开始判断。(6)如何在Python中复制对象?(赋值、浅拷贝和深拷贝的区别)(7)介绍except的用法和作用?(八)Python中pass语句的作用是什么?(九)介绍Python中range()函数的用法?(X)如何用Python查询和替换文本字符串?(11)Python中的match()和search()有什么区别?(XII)用Python匹配HTML标签时,*以及。*?有什么区别?(十三)Python中如何生成随机数?(十四)有没有工具可以帮助发现python bugs,进行静态代码分析?(15)如何在函数中设置全局变量?(16)单引号、双引号和三引号的区别概述

  

目录

  从三个方面回答:一个对象的引用计数机制,两个垃圾收集机制,三个内存池机制。

  1.对象的引用计数机制

  Python内部使用引用计数来跟踪内存中的对象,所有对象都有引用计数。当引用计数增加时:

  为对象指定新名称。

  将其放入容器(如列表、元组或字典)中,引用计数会减少:

  del语句对对象别名显示的破坏

  引用超出范围或被重新分配。

  sys.getrefcount()函数可以获取对象的当前引用计数。

  在大多数情况下,引用计数比您猜测的要大得多。对于不可变的数据(比如数字和字符串),为了节省内存,解释器会在程序的不同部分共享内存。

  2.垃圾回收

  当对象的引用计数为零时,它将被垃圾收集机制处理掉。

  当两个对象A和B相互引用时,del语句可以减少A和B的引用计数,并销毁用于引用底层对象的名称。然而,由于每个对象包含对其他对象的应用,

  因此,引用计数不会为零,对象也不会被销毁。(导致内存泄漏)。为了解决这个问题,解释器将定期执行循环检测器来搜索不可访问对象的循环并删除它们。

  3.内存池机制

  Python为内存提供了垃圾收集机制,但是它将未使用的内存放入内存池,而不是返回给操作系统。

  Pymalloc机制为了加快Python的执行效率,Python引入了内存池机制来管理小块内存的申请和释放。

  Python中所有小于256字节的对象都使用pymalloc实现的分配器,大型对象使用系统的malloc。

  Python对象,比如整数、浮点数、List,都有自己的私有内存池,对象不共享自己的内存池。也就是说,如果你分配释放了大量的整数,那么用来缓存这些整数的内存就不能再分配给浮点数了。

  

(一)Python 是如何进行内存管理的?

  回答:lambda表达式通常用在需要一个函数的时候,但是你又不想麻烦给一个函数命名,也就是匿名函数。

  Lambda函数:主要用途是指向短回调函数lambda [arguments] :表达式。

  a=lambdax,y:x y

  答(3.11)

  

(二)什么是 lambda 函数?它有什么好处?

  回答:直接用tuple和list函数就可以了。type()可以判断一个对象的类型。

  

(三)Python 里面如何实现 tuple 和 list 的转换?

  重复元素

  答

  使用 set 函数,set(list)使用字典函数,

  

>>>a=[1,2,4,2,4,5,6,5,7,8,9,0]

  >>> b={}

  >>>b=b.fromkeys(a)

  >>>c=list(b.keys())

  >>> c

  

  

(五)编程用 sort 进行排序,然后从最后一个元素开始判断

  

a=[1,2,4,2,4,5,7,10,5,5,7,8,9,0,3]

  a.sort() last=a[-1]

  for i inrange(len(a)-2,-1,-1): if last==a:

  del a else:last=a print(a)

  

  

(六)Python 里面如何拷贝一个对象?(赋值,浅拷贝,深拷贝的区别)

  答:赋值(=),就是创建了对象的一个新的引用,修改其中任意一个变量都会影响到另一个。浅拷贝:创建一个新的对象,但它包含的是对原始对象中包含项的引用(如果用引用的方式修改其中一个对象,另外一个也会修改改变){1,完全切片方法;2,工厂函数,如 list();

  3,copy 模块的 copy()函数}

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

  

  

(七)介绍一下 except 的用法和作用?

  答:try…except…except…[else…][finally…]

  执行 try 下的语句,如果引发异常,则执行过程会跳到 except 语句。对每个 except 分支顺序尝试执行,如果引发的异常与 except 中的异常组匹配,执行相应的语句。

  如果所有的 except 都不匹配,则异常会传递到下一个调用本代码的最高层 try 代码中。

  try 下的语句正常执行,则执行 else 块代码。如果发生异常,就不会执行如果存在 finally 语句,最后总是会执行。

  

  

(八)Python 中 pass 语句的作用是什么?

  答:pass 语句不会执行任何操作,一般作为占位符或者创建占位程序,whileFalse:pass

  

  

(九)介绍一下 Python 下 range()函数的用法?

  答:列出一组数据,经常用在 for in range()循环中

  

  

(十)如何用 Python 来进行查询和替换一个文本字符串?

  答:可以使用 re 模块中的 sub()函数或者 subn()函数来进行查询和替换,

  格式:sub(replacement, string[,count=0])(replacement 是被替换成的文本,string 是需要被替换的文本,count 是一个可选参数,指最大被替换的数量)

  

>>> import re

  >>>p=re.compile(‘bluewhitered)

  >>>print(p.sub(‘colour,blue socks and red shoes)) colour socks and colourshoes

  >>>print(p.sub(‘colour,blue socks and red shoes,count=1)) colour socks and redshoes

  subn()方法执行的效果跟 sub()一样,不过它会返回一个二维数组,包括替换后的新的字符串和总共替换的数量

  

  

(十一)Python 里面 match()和 search()的区别?

  答:re 模块中 match(pattern,string[,flags]),检查 string 的开头是否与 pattern 匹配。

  re 模块中re.search(pattern,string[,flags]),在 string 搜索 pattern 的第一个匹配值。

  

>>>print(re.match(‘super, ‘superstition).span()) (0, 5)

  >>>print(re.match(‘super, ‘insuperable)) None

  >>>print(re.search(‘super, ‘superstition).span()) (0, 5)

  >>>print(re.search(‘super, ‘insuperable).span()) (2, 7)

  

  

(十二)用 Python 匹配 HTML tag 的时候,<.*>和<.*?>有什么区别?

  答:术语叫贪婪匹配( <.*> )和非贪婪匹配(<.*?> )

  例如:

  

test

  <.*> :

  test

  <.*?> :

  

  

(十三)Python 里面如何生成随机数?

  答:random 模块

  随机整数:random.randint(a,b):返回随机整数 x,a<=x<=b

  random.randrange(start,stop,[,step]):返回一个范围在(start,stop,step)之间的随机整数,不包括结束值。

  随机实数:random.random( ):返回 0 到 1 之间的浮点数

  random.uniform(a,b):返回指定范围内的浮点数。

  

  

(十四)有没有一个工具可以帮助查找 python 的 bug 和进行静态的代码分析?

  答:PyChecker 是一个 python 代码的静态分析工具,它可以帮助查找 python 代码的 bug, 会

  对代码的复杂度和格式提出警告

  Pylint 是另外一个工具可以进行 codingstandard 检查

  

  

(十五)如何在一个 function 里面设置一个全局的变量?

  答:解决方法是在 function 的开始插入一个 global 声明: def f()

  global x

  

  

(十六)单引号,双引号,三引号的区别

  答:单引号和双引号是等效的,如果要换行,需要符号(\),三引号则可以直接换行,并且可以包含注释

  如果要表示 Let’s go 这个字符串单引号:s4 = ‘Let\’s go’

  双引号:s5 = Let’s go

  

s6 = ‘I realy like“python”!

  这就是单引号和双引号都可以表示字符串的原因了

  

  

总结

  到此这篇关于Python面经之16个高频面试问题总结的文章就介绍到这了,更多相关Python面试问题内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: