Python面经【12】

Python面经【12】

  • 一、 Range和xrange的区别?
  • 二、简述对input()函数的理解
  • 三、代码中要修改不可变数据会出现什么问题?抛出什么异常?
  • 四、print调用python中底层的什么方法?
  • 五、unittest是什么
  • 六、模块和包是什么?
  • 七、面向对象深度优先和广度优先是什么?
  • 八、是否使用过functools中的函数?其作用是什么?
  • 九、内存泄漏是什么?如何避免?

一、 Range和xrange的区别?

两者用法相同,不同的是range返回的结果是一个列表,而xrange的结果是一个生成器,前者是直接开辟一块内存空间来保存列表,后者是边循环边使用,只有使用时才会开辟内存空间,所以当列表很长时,使用xrange性能要比range好。

二、简述对input()函数的理解

  1. 在python3中,input()获取用户输入,不论用户输入是什么,获取到的都是字符串类型的。
  2. 在python2中有raw_input()和input(),raw_input()和input()作用是一样的,input()输入的是什么数据类型,获取到的就是什么数据类型的。

三、代码中要修改不可变数据会出现什么问题?抛出什么异常?

代码不会正常运行,抛出TypeError异常

四、print调用python中底层的什么方法?

print方法默认调用sys.stdout.write方法,即往控制台打印字符串。

五、unittest是什么

在python中,unittest是python中的单元测试框架。它拥有支持共享搭建、自动测试、在测试中暂停代码、将不同测试迭代成一组等功能。

六、模块和包是什么?

  1. 在python中,模块是搭建程序的一种方式。每一个python代码文件都是一个模块,并可以引用其他的模块,比如对象和属性。
  2. 一个包含许多python代码的文件夹是一个包。一个包可以包含模块和子文件夹。

七、面向对象深度优先和广度优先是什么?

在子类继承多个父类时,属性查找方式分深度优先和广度优先两种。
当类是经典类时(主要在python2版本中的没有主动继承object的类),多继承情况下,在要查找属性不存在时,会按照深度优先方式查找。
当类是新式类时(python3版本中的所有类和python2中主动继承object的类),多继承情况下,在要查找属性不存在时,会按照广度优先方式查找。

  • 简单来说:经典类是纵向查找,新式类是横向查找
  • 经典类和新式类的区别就是:在声明类的时候,新式类需要加上object关键字
  • 在python3中默认是新式类

八、是否使用过functools中的函数?其作用是什么?

  1. Functools用于高阶函数:指那些作用于函数或者返回其他函数的函数,只要是可以被当做函数调用的对象就是这个模块的目标。
  2. 所谓高阶函数,就是以函数作为输入参数,返回也是函数。

九、内存泄漏是什么?如何避免?

内存泄漏是指计算机程序中,由于错误的使用或管理内存,导致已经分配的内存无法被正确释放,从而导致内存被持续占用,而无法被其他程序或操作系统回收利用的现象。这种情况会导致性能下降甚至崩溃。

  1. 使用del语句显式删除不在使用的对象
  2. 避免在全局变量中存储大量数据
  3. 定期调用gc.collect()以强制执行垃圾回收
  4. 避免复杂变量间的引用,即避免“浅拷贝”

你可能感兴趣的:(Python基础,python,开发语言,range,内存泄漏)