Python八股文

简介: Python八股文

py的语言特性: 动态强类型
静/动态: 编绎/运行 时确定变量类型

弱/强类型: 会/不会发生隐式类型转换

py作为后端语言的优缺点
语言简单灵活,开发效率高

胶水语言,轮子多,拥有Django这种的成熟web框架

执行效率低,性能不如其他语言

动态语言,没有类型声明时就没有自动补全,而且很多问题要运行后才能发现

什么是duck type?
鸭子类型更关注对象的行为,只要实现了某种接口方法就行,而不在乎是什么类型

比如说定义了 __iter__魔法方法的类实例对象都可以用for来迭代

什么是monkey patch?
monkey patch就是运行时替换对象,本质上是对象的重新赋值

py3和py2的区别
print在py3里是一个函数,在py2里只是一个关键字
py3文件的默认编码是utf8,py2文件的默认编码是ascii
py3的str是unicode字符串,而py2的str是bytes
py3的range()返回一个可迭代对象,py2的 range()返回一个列表,xrange()返回一个可迭代对象,
py3的除法返回float,py2的除法返回int
可变对象与不可变对象
可变对象: list,dict,set
不可变对象: bool,int,float,tuple,str…
函数传递中args,*kwargs
用来处理可变参数,接收参数后,args会变成一个tuple,kwargs会变成一个dict

什么时候需要捕获异常?
Django的ORM框架操作数据库时,获取数据,更新数据等都有可能会异常
socket通信时,recv()方法可能会因为对方突然中断连接导致异常
什么是CPython GIL?
GIL,Global Interpreter Lock,即全局解释器锁

引入GIL是因为CPython的内存管理并不是线程安全的,

为了保护多线程下对python对象的访问,每个线程在执行过程中都需要先获取GIL,保证同一时刻只有一个线程在执行代码

GIL使得python的多线程不能充分发挥多核CPU的性能,对CPU密集型程序的影响较大

什么是生成器?
生成器是一种可迭代对象,可以挂起并保持当前的状态

生成器遇到yield处会停止执行,调用next()或send()才会继续执行

定义一个生成器有两种方式,一种是生成器推导式,一种是在普通函数中添加yield语句并实例化

浅拷贝和深拷贝
浅拷贝出来的是一个独立的对象,但它的子对象还是原对象中的子对象

深拷贝会递归地拷贝原对象中的每一个子对象,因此拷贝后的对象和原对象互不相关。

迭代器与可迭代对象的区别
可迭代对象类,必须自定义__iter__()魔法方法,range,list类的实例化对象都是可迭代对象

迭代器类,必须自定义__iter__()和__next__()魔法方法,用iter()函数可以创建可迭代对象的迭代器

闭包
闭包就是一个嵌套函数,它的内部函数 使用了 外部函数的变量或参数,它的外部函数 返回了 内部函数

可以保存外部函数内的变量,不会随着外部函数调用完而销毁

python垃圾回收机制
引用计数为主,标记清除 和 分代回收为辅

引用计数机制是这样的

当对象被创建,被引用,作为参数传递,存储到容器中,引用计数+1

当对象离开作用域,引用指向别的对象,del,从容器中移除,引用计数-1

当引用计数降为0,python就会自动回收该对象所在的内存空间,

但是引用计数无法解决循环引用的问题,所以引入了标记清除和分代回收机制

async和await的作用
async: 声明一个函数为异步函数,函数内只要有await就要声明为async

await: 搭配asyncio.sleep()时会切换协程,当切换回来后再继续执行下面的语句

内置的数据结构和算法
内置数据结构: list,dict,tuple,set
内置算法: sorted,max
collections模块
collections模块提供了一些好用的容器数据类型,其中常用的有: namedtuple,deque,Counter,OrderedDict,defaultdict

为什么dict查找的时间复杂度是O(1)?
dict底层是哈希表,哈希表类似于C语言的数组,可以实现按索引随机访问

但dict的key不一定是整数,需要先通过哈希函数,再经过取余操作转换为索引

list tuple的底层结构
list和tuple底层都是顺序表结构

list底层是可变数组,数组里存放的是元素对象的指针

set的底层结构
哈希表,key就是元素,value都是空

class方法 和 static方法的区别
class方法的第一个参数是cls,可以访问类属性,类方法

static方法和普通函数一样,只不过是放在类里,要通过类或实例来调用,但是它不能访问类和实例的属性和方法

什么是装饰器?
装饰器是一个接收函数作为参数的闭包函数

它可以在不修改函数内部源代码的情况下,给函数添加额外的功能

import time

def calc_time(func):
    def inner():
        t1 = time.time()
        func()
        t2 = time.time()
        print('cost time: {}s'.format(t2-t1))
    return inner

什么是元类? 使用场景
元类是创建类的类,type还有继承自type的类都是元类

作用: 在类定义时(new, init)和 类实例化时(call) 可以添加自定义的功能

使用场景: ORM框架中创建一个类就代表数据库中的一个表,但是定义这个类时为了统一需要把里面的类属性全部改为小写,这个时候就要用元类重写new方法,把attrs字典里的key转为小写

相关文章
|
机器学习/深度学习 Python
概率论常见面试问题总结,含答案
概率论常见面试问题总结,含答案
|
消息中间件 监控 数据可视化
一口气完成ELK 日志平台的搭建,我感觉我又行了!
最近在玩 ELK 日志平台,它是 Elastic 公司推出的一整套日志收集、分析和展示的解决方案。
|
Linux Perl
解决脚本实现:sed -i 替换变量,变量中含有特殊转义字符的问题
解决脚本实现:sed -i 替换变量,变量中含有特殊转义字符的问题
解决脚本实现:sed -i 替换变量,变量中含有特殊转义字符的问题
|
机器学习/深度学习 存储 数据采集
阿里云 ACP是什么?阿里云 ACP有什么用?
ACP是什么,它是阿里云企业推出的针对于数据分析工程师的资格认证,有极高的含金量。因为阿里云在国内市场处于领先地位,他们推出的资格认证自然而然受到很多人的欢迎,很多互联网行业从业人员都以获得阿里ACP认证为荣。那么,阿里云 ACP是什么?阿里云 ACP有什么用?在认证大使官网上查阅了相关资料,我得到了答案
2989 0
阿里云 ACP是什么?阿里云 ACP有什么用?
|
Python
Python面试题大全总结
Python面试题大全总结
2814 0
Python面试题大全总结
|
JavaScript 前端开发 API
Next.js 实战 (六):如何实现文件本地上传
这篇文章介绍了在Next.js中如何实现文件上传到本地的方法。文章首先提到Next.js官方文档中没有提供文件上传的实例代码,因此开发者需要自行实现,通常有两种思路:使用Node.js原生上传或使用第三方插件如multer。接着,文章选择了使用Node.js原生上传的方式来讲解实现过程,包括如何通过哈希值命名文件、上传到指定目录以及如何分类文件夹。然后,文章展示了具体的实现步骤,包括编写代码来处理文件上传,并给出了代码示例。最后,文章通过一个效果演示说明了如何通过postman模拟上传文件,并展示了上传后的文件夹结构。
242 0
Next.js 实战 (六):如何实现文件本地上传
|
机器学习/深度学习 存储 人工智能
【数据挖掘】2022年2023届秋招知能科技公司机器学习算法工程师 笔试题
本文是关于2022-2023年知能科技公司机器学习算法工程师岗位的秋招笔试题,包括简答题和编程题,简答题涉及神经网络防止过拟合的方法、ReLU激活函数的使用原因以及条件概率计算,编程题包括路径行走时间计算和两车相向而行相遇时间问题。
203 2
【数据挖掘】2022年2023届秋招知能科技公司机器学习算法工程师 笔试题
|
机器学习/深度学习 人工智能 算法
【数据挖掘】2022年2023届秋招奇虎360机器学习算法工程师 笔试题
本文提供了奇虎360公司2022年秋招机器学习算法工程师岗位的笔试题内容,包括选择题和编程题,涉及概率统计、数据结构、机器学习、计算机组成原理等多个领域。
231 5
|
机器学习/深度学习 算法 数据挖掘
【数据挖掘】2022年2023届秋招宏瓴科技公司机器学习算法工程师 笔试题
关于宏瓴科技有限公司2022-2023年秋招机器学习算法工程师岗位的笔试题目及作者个人对部分题目的解答尝试,涉及贝叶斯误差和贝叶斯最优分类器的概念、贝叶斯误差的重要性和估算方法,以及如何有效利用训练集和测试集进行深度学习模型训练的数据集划分策略。
198 4
|
算法 数据挖掘 索引
【数据挖掘】2022年2023届秋招Kanaries雾角科技算法岗 笔试题
本文介绍了2022年Kanaries雾角科技算法岗位的笔试题目,涵盖了LeetCode和牛客网的题目,包括字符串处理、几何问题、矩阵操作、数组搜索、二叉树遍历、幂运算及概率计算等多种算法题目,并提供了部分题目的Python代码实现。
199 1