这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » 扣丁学堂为你总结Python主要面试题

共1条 1/1 1 跳转至

扣丁学堂为你总结Python主要面试题

助工
2020-08-21 14:40:26     打赏

  现在编程界,可谓最火的语言就是Python,Python编程学习起来很费事,但是面试时也会有很多的问题,今天就让我们扣丁学堂为大家列举几点常见的问题。

  【题目:001】说说你对pythonic的看法,尝试解决下面的小问题


  #简洁,明了,严谨,灵活


  #交换两个变量值


  a,b=b,a


  #去掉list中的重复元素


  old_list=[1,1,1,3,4]


  new_list=list(set(old_list))


  #翻转一个字符串


  s='abcde'


  ss=s[::-1]


  #用两个元素之间有对应关系的list构造一个dict


  names=['jianpx','yue']


  ages=[23,40]


  m=dict(zip(names,ages))


  #将数量较多的字符串相连,如何效率较高,为什么


  fruits=['apple','banana']


  result=''.join(fruits)


  #python字符串效率问题之一就是在连接字符串的时候使用‘+’号,例如s=‘s1’+‘s2’+‘s3’+...+’sN’,总共将N个字符串连接起来,但是使用+号的话,python需要申请N-1次内存空间,然后进行字符串拷贝。原因是字符串对象PyStringObject在python当中是不可变对象,所以每当需要合并两个字符串的时候,就要重新申请一个新的内存空间(大小为两个字符串长度之和)来给这个合并之后的新字符串,然后进行拷贝。所以用+号效率非常低。建议在连接字符串的时候使用字符串本身的方法join(list),这个方法能提高效率,原因是它只是申请了一次内存空间,因为它可以遍历list中的元素计算出总共需要申请的内存空间的大小,一次申请完。


  【题目:002】|你调试python代码的方法有哪些?


  具体IDE都有调试,比如:IDLE,Eclipse+Pydev都可以设置断点调试。


  pdb模块也可以做调试。


  还有PyChecker和Pylint


  PyChecker是一个python代码的静态分析工具,它可以帮助查找python代码的bug,会对代码的复杂度和格式提出警告


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


  【题目:003】|你在github上都fork过哪些python库,列举一下你经常使用的,每个库用一句话描述下其功能


  http://rogerdudler.github.io/git-guide/index.zh.html#关于git简明指南


  http://www.zhihu.com/question/20070065#关于git的BBS


  http://www.techug.com/githug-for-designer#关于github的


  【题目:004】|什么是GIL?


  什么是GIL(GlobalInterpreterLock)全局解释器锁?简单地说就是:


  每一个interpreter进程,只能同时仅有一个线程来执行,获得相关的锁,存取相关的资源.


  那么很容易就会发现,如果一个interpreter进程只能有一个线程来执行,


  多线程的并发则成为不可能,即使这几个线程之间不存在资源的竞争.


  从理论上讲,我们要尽可能地使程序更加并行,能够充分利用多核的功能.


  【题目:005】|什么是元类(meta_class)?


  元类就是用来创建类的“东西”


  详情操作:http://blog.jobbole.com/21351/


  【题目:006】|对比一下dict中items与iteritems?


  >>>D={'a':1,'b':2,'c':3,'d':4}


  >>>D.items()#一次性取出所有


  [('a',1),('c',3),('b',2),('d',4)]


  >>>D.iteritems()#迭代对象,每次取出一个。用for循环遍历出来;


  <dictionary-itemiteratorobjectat0x00000000026243B8>


  >>>foriinD.iteritems():


  ...printi,


  ...


  ('a',1)('c',3)('b',2)('d',4)


  >>>fork,vinD.iteritems():


  ...printk,


  ...


  acbd


  总结:


  1.一般iteritems()迭代的办法比items()要快,特别是数据库比较大时。


  2.在Python3中一般取消前者函数


  【题目:007】|是否遇到过python的模块间循环引用的问题,如何避免它?


  这是代码结构设计的问题,模块依赖和类依赖


  如果老是觉得碰到循环引用,很可能是模块的分界线划错地方了。可能是把应该在一起的东西硬拆开了,可能是某些职责放错地方了,可能是应该抽象的东西没抽象


  总之微观代码规范可能并不能帮到太多,重要的是更宏观的划分模块的经验技巧,推荐uml,脑图,白板等等图形化的工具先梳理清楚整个系统的总体结构和职责分工


  采取办法,从设计模式上来规避这个问题,比如:


  1.使用“__all__”白名单开放接口


  2.尽量避免import


  【题目:008】|有用过withstatement吗?它的好处是什么?


  >>>withopen('text.txt')asmyfile:


  ...whileTrue:


  ...line=myfile.readline()


  ...ifnotline:


  ...break


  ...printline,


  #with语句使用所谓的上下文管理器对代码块进行包装,允许上下文管理器实现一些设置和清理操作。


  #例如:文件可以作为上下文管理器使用,它们可以关闭自身作为清理的一部分。


  #NOTE:在PYTHON2.5中,需要使用from__future__importwith_statement进行with语句的导入


  【题目:009】|用Python生成指定长度的斐波那契数列


  deffibs(x):


  result=[0,1]


  forindexinrange(x-2):


  result.append(result[-2]+result[-1])


  returnresult


  if__name__=='__main__':


  num=input('Enteronenumber:')


  printfibs(num)


  想要学习Python或者想要进行Python培训的小伙伴就选择口碑良好的扣丁学堂进行学习吧,扣丁学堂不仅有专业的老师和与时俱进的课程体系,更有大量的Python视频教程供学员观看学习,想要学好Python高薪就业的小伙伴抓紧时间行动吧。扣丁学堂Python技术交流群:816572891。




共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]