高频面试题之Python三大器

简介: Python三大器: decorator generator iterator

高频面试题之Python三大器

3.jpg

Python三大器之首-- 装饰器

从三大器面试频率来讲, 问的最多的当属装饰器, 究其原因是装饰器在开发场景中明面上使用的非常多导致的, 我们遇到这个问题一般从以下几点入手:

  • 1.什么是闭包?
  • 2.什么是装饰器?
  • 3.装饰器的作用是什么?
  • 4.你的项目中哪些地方使用了装饰器?

1. 什么是闭包

闭包(closure) 就是: 外部函数中定义一个内部函数,内部函数引用外部函数中的变量,外部函数的返回值是内部函数

闭包(closure) 的作用: 1) 内部函数可以操作函数外部变量 2) 让函数内部的变量始终保存在内存中

闭包(closure) 注意事项: 1) 增加内存消耗不能滥用 2) 闭包无法改变外部函数局部变量的内存地址

32.jpg

2. 什么是装饰器 ?

装饰器(decorator):闭包的参数类型改成函数传入 就是装饰器了

33.jpg

3. 装饰器的作用

装饰器(decorator)的作用: 可以在 不修改函数 原有功能代码的情况下添加额外的功能, 方便功能扩展!

4. 你的项目中哪些地方使用了装饰器 ?

# 1. 判断是否登录的功能
# 2. 功能转换器: 数据格式转换功能,  计算功能, timer装饰器等
# 3. 封装好的装饰器: @property, @classmethod, @click, @dispatch等

Python三大器之--生成器

作为在能够解决海量数据操作的内存问题的生成器一定是必考题之一哦, generator一般问题如下:

  • 1.什么是生成器 ?
  • 2.生成器的作用
  • 3.生成器的原理

什么是生成器?

  1. 将列表推导式的中括号[] 改为 () 就是最简单的生成器generator
  2. 凡是函数中 带 yield关键字的函数, 返回值就是生成器generator

34.jpg

生成器的作用

  1. 处理海量数据的同时节省内存消耗, 生成器每次只返回一个结果, 然后再继续返回.... 依次类推, 不至于一次性返回海量数据造成内存消耗过大的问题
  2. 在一些功能里面使用yield可以简化代码, 方便阅读

生成器的原理

生成器generator 之所以能够调用一个生成一个, 得益于内部的 ___next__, __iter__函数, 当然使用python的内置函数next() 也可以获取生成器内部的数据, 但是一般我们很少会主动使用 __netx__函数和next()针对generator进行操作, 使用for循环遍历使用的方式居多, 至于其他原理爱好者通过解释器啦, 栈了, 堆了层面解释generator的原理这里不做过多描述!

35.jpg

Python三大器之--迭代器

在开发中经常可以遇到很多容器对象, 一次性遍历使用的时候需要消耗大量的资源, 如果将他们转换成迭代器那么就可以节省资源咯, 以下3点是需要明确的:

  • 1.什么是迭代器?
  • 2.迭代器内部实现
  • 3.迭代器和生成器之间的关系

什么是迭代器?

迭代器(iterator): 就是能够循环遍历, 又可以记住遍历位置的对象! 在遍历的时候不会一次性全部取出, 等到需要用的时候才生成被遍历出去!
iterator_demo = iter([1,2,3])
print(type(iterator_date))

-- <class 'list_iterator'>

迭代器内部实现

迭代器(iterator): 内部实现了 __iter____next__函数, __iter__函数会返回对象本身, __next__函数负责元素数据迭代操作.

内置函数 iter() 可以将迭代对象转换成迭代器, 内置函数next() 也可以迭代数据

迭代器和生成器之间的关系

想必大家从上认真看到了这里会发现无论是迭代器还是生成器都实现了 __iter____next__函数, So 生成器本质还是个迭代器, 生成器的区别在于在迭代数据的时候是 被动生成的, 每次被调用一次才生成一次!这是其他的迭代器没有的特征! 延迟计算节省了内存!
小结

本文主要是应对常用的三大器进行了阐述, 至于更底层面的代码不建议深究!

相关文章
|
1月前
|
Java C++ Python
【面试宝典】深入Python高级:直戳痛点的题目演示(下)
【面试宝典】深入Python高级:直戳痛点的题目演示(下)
|
1月前
|
设计模式 Unix Python
【面试宝典】深入Python高级:直戳痛点的题目演示(上)
【面试宝典】深入Python高级:直戳痛点的题目演示(上)
|
4月前
|
数据采集 机器学习/深度学习 数据可视化
了解数据科学面试中的Python数据分析重点,包括Pandas(DataFrame)、NumPy(ndarray)和Matplotlib(图表绘制)。
【7月更文挑战第5天】了解数据科学面试中的Python数据分析重点,包括Pandas(DataFrame)、NumPy(ndarray)和Matplotlib(图表绘制)。数据预处理涉及缺失值(dropna(), fillna())和异常值处理。使用describe()进行统计分析,通过Matplotlib和Seaborn绘图。回归和分类分析用到Scikit-learn,如LinearRegression和RandomForestClassifier。
100 3
|
4月前
|
Python
155. 最小栈 力扣 python 空间换时间 o(1) 腾讯面试题
155. 最小栈 力扣 python 空间换时间 o(1) 腾讯面试题
|
4月前
|
存储 算法 索引
1124. 表现良好的最长时间段 (python) 前缀和 分类讨论 最大长度 力扣 面试题
1124. 表现良好的最长时间段 (python) 前缀和 分类讨论 最大长度 力扣 面试题
|
4月前
|
算法 Java Linux
python中的面试常考知识点
python中的面试常考知识点
|
6月前
|
数据采集 Java 数据挖掘
最新Python+OpenCV+dlib汽车驾驶员疲劳驾驶检测!,2024年最新网易云java面试
最新Python+OpenCV+dlib汽车驾驶员疲劳驾驶检测!,2024年最新网易云java面试
最新Python+OpenCV+dlib汽车驾驶员疲劳驾驶检测!,2024年最新网易云java面试
|
6月前
|
数据采集 算法 网络协议
最新Python 面试常见问题(1),2024年最新面试官必问的10个问题
最新Python 面试常见问题(1),2024年最新面试官必问的10个问题
最新Python 面试常见问题(1),2024年最新面试官必问的10个问题
|
6月前
|
数据采集 XML 程序员
最新用Python做垃圾分类_python垃圾分类代码用key和format,5年经验Python程序员面试27天
最新用Python做垃圾分类_python垃圾分类代码用key和format,5年经验Python程序员面试27天
最新用Python做垃圾分类_python垃圾分类代码用key和format,5年经验Python程序员面试27天
|
6月前
|
Python
最新用Python做一个变态版的《超级玛丽》游戏,面试必备知识点
最新用Python做一个变态版的《超级玛丽》游戏,面试必备知识点
最新用Python做一个变态版的《超级玛丽》游戏,面试必备知识点
下一篇
无影云桌面