高频面试题之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 生成器本质还是个迭代器, 生成器的区别在于在迭代数据的时候是 被动生成的, 每次被调用一次才生成一次!这是其他的迭代器没有的特征! 延迟计算节省了内存!
小结

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

相关文章
|
4月前
|
NoSQL 数据库 Redis
万字长文Python面试题,找工作就靠这了
万字长文Python面试题,找工作就靠这了
552 0
|
4月前
|
JSON 数据格式 开发者
Python 面试题大全系列(二)
Python 面试题大全系列(二)
|
7月前
|
SQL 算法 关系型数据库
python技术面试题(十九)--腾讯
python技术面试题(十九)--腾讯
|
1天前
|
调度 Python
Python多线程、多进程与协程面试题解析
【4月更文挑战第14天】Python并发编程涉及多线程、多进程和协程。面试中,对这些概念的理解和应用是评估候选人的重要标准。本文介绍了它们的基础知识、常见问题和应对策略。多线程在同一进程中并发执行,多进程通过进程间通信实现并发,协程则使用`asyncio`进行轻量级线程控制。面试常遇到的问题包括并发并行混淆、GIL影响多线程性能、进程间通信不当和协程异步IO理解不清。要掌握并发模型,需明确其适用场景,理解GIL、进程间通信和协程调度机制。
6 0
|
1天前
|
API Python
Python模块化编程:面试题深度解析
【4月更文挑战第14天】了解Python模块化编程对于构建大型项目至关重要,它涉及代码组织、复用和维护。本文深入探讨了模块、包、导入机制、命名空间和作用域等基础概念,并列举了面试中常见的模块导入混乱、不适当星号导入等问题,强调了避免循环依赖、合理使用`__init__.py`以及理解模块作用域的重要性。掌握这些知识将有助于在面试中自信应对模块化编程的相关挑战。
6 0
|
1月前
|
Unix Java C++
最常见的 35 个 Python 面试题及答案(2018 版)
最常见的 35 个 Python 面试题及答案(2018 版)
52 0
|
7月前
|
人工智能 Python
Python 常见面试题解析
Python 是一门广泛应用于软件开发、数据科学和人工智能领域的高级编程语言。在 Python 的生态系统中,有许多常见的面试题目,这些问题旨在评估候选人的编程和问题解决能力。本文将介绍一些常见的 Python 面试题,并提供它们的解析和示例答案,以帮助您在面试中表现出色。
|
3月前
|
存储 算法 Java
Python编程面试题及答案(20例)
Python编程面试题及答案(20例)
21 1
|
3月前
|
机器学习/深度学习 存储 人工智能
50道必备的Python面试题 (建议点赞)
50道必备的Python面试题 (建议点赞)
139 0
|
4月前
|
NoSQL 数据库 Redis
精心整理170道Python面试题,建议先收藏
精心整理170道Python面试题,建议先收藏
252 1

热门文章

最新文章