本篇文章将对一些常见的python面试题目进行整理,并做简要的回答,可供参考,如果你有更好更全面的答案,那么请在评论区评论,一起交流学习^0^
1. 列举 Python2 和 Python3 的区别?
答:
2. 简述 Python 的深浅拷贝以及应用场景?
答:
浅拷贝:对另外一个变量的内存地址的拷贝,这两个变量指向同一个内存地址的变量值。(copy.copy())
深拷贝:一个变量对另外一个变量的值拷贝。(copy.deepcopy())
应用场景:深拷贝应用在需要对拷贝过来的变量进行修改,而不改变原被拷贝变量的情况
3. 能否解释一下 *args 和 **kwargs?
答:
当我们不知道向函数传递多少参数时,我们就使用*args,*args 用来将参数打包成tuple给函数体调用;
当我们不知道该传递多少关键字参数时,使用**kwargs来收集关键字参数,**kwargs 打包关键字参数成dict给函数体调用。
4. 简述 生成器、迭代器、可迭代对象 以及应用场景?
答:
可迭代对象就可以用for循环语句进行遍历的对象就是可迭代对象;
生成器写起来就像是正规的函数 ,只是在需要返回数据的时候使用yield语句。每次next()被调用时,生成器会返回它脱离的位置。
迭代器是一个更抽象的概念,任何对象,如果它的类有next方法和iter方法返回自己本身,那么这个对象就是迭代器。
应用场景:比如我们使用python读取一 个10g的文件,如果一次性将10g的文件加载到内存处理的话(read方法),内存肯定会溢出;这里如果可以 使用生成器把读写交叉处理进行,比如使用(readline和readlines)就可以再循环读取的同时不断处理,这样就可以节省大量的内存空间。
5. 请说明 yield 关键字的工作机制。
答:
如果函数里面有yield关键字, 这个函数的返回值是生成器。如果遇到yield, 函数停止执行, 当再次调用next方法时, 从停止的地方继续执行。默认next方法会把yield后面的值返回回来。
6. 请简单谈谈装饰器的作用和功能。
答:
装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前提下增加额外的功能,装饰器的返回值也是一个函数对象。写代码要遵循 开放封闭 原则,简单来说,它规定已经实现的功能代码不允许被修改,但可以被扩展,即: 封闭:已实现的功能代码块 ,开放:对扩展开发
装饰器具体可以实现以下功能:
7. Python 中如何读取大数据的文件内容?
答:
使用python读取一 个大数据的文件时,如果一次性将特别大的数据文件加载到内存处理的话(read方法),内存肯定会溢出;这里可以 使用生成器把读写交叉处理进行,比如使用readline和readlines就可以再循环读取的同时不断处理,这样就可以节省大量的内存空间。
8. Python 中的模块和包是什么?
答:
模块就是工具包,要想使用这个工具包中的工具(就好比函数),就需要导入这个模块。模块是非常简单的Python文件,单个Python文件就是一个模块。
包就是将有联系的模块组织在一起的一个集和,有效避免模块名称冲突问题,让应用组织结构更加清晰。
9. python 是如何进行内存管理的(python 是如何实现垃圾回收机制的)?
答:
python的垃圾回收机制采用的是引用计数机制为主,标记-清除和分代收集两种机制为辅的策略。
10. 谈谈你对面向对象的理解?
答:
面向对象是按人们认识客观世界的系统思维方式,采用基于对象(实体)的概念建立模型,模拟客观世界分析、设计、实现软件的办法。通过面向对象的理念使计算机软件系统能与现实世界中的系统一一对应。面向对象编程可以将数据与函数绑定到一起,进行封装,这样能够更快速的开发程序,减少了重复代码的重写过程。
11. Python 面向对象中的继承有什么特点?
答:
Python同时支持单继承与多继承,当只有一个父类时为单继承,当存在多个父类时为多继承。并且子类会继承父类的所有的属性和方法,子类也可以覆盖父类同名的变量和方法。
12. 面向对象中 super 的作用?
答:
super用在子类中可以快速调用父类的方法,格式为: super(子类名称, self).父类的方法名()
13. 面向对象深度优先和广度优先是什么, 并说明应用场景?
答:
深度优先算法:它是经典类多继承搜索的顺序,先深入继承树左侧查找,然后再返回,开始查找右侧。
广度优先算法:它是新式类多继承搜索的顺序,先在水平方向查找,然后再向上查找。
14. 请简述__init__和__len__这两个魔术方法的作用
答:
构造方法__init__:当一个对象被创建后,会立即调用该构造方法,自动执行构造方法里面的内容。
构造方法__len__:该构造方法会返回元素的数量。