当前位置: 首页 > news >正文

迭代器、生成器、装饰器面试题总结

一、迭代器基础

1、什么是迭代器?

答:迭代器是可以记住遍历位置的对象,从第一个元素开始访问只能向前不能后退。对可迭代对象调用__iter__()方法会得到迭代器。

必须实现两个方法:

__iter__()

__next__()

2、可迭代对象VS迭代器?

可迭代对象:能使用for循环遍历的对象就是可迭代对象。

例如:列表、字符串、元组等实现了__ilter__(),可以拿到迭代器。

迭代器:additionally实现了__next__()。

手写一个迭代器:

class MyIterator: def __init__(self): self.number = 0 def __iter__(self): return self def __next__(self): self.number += 1 return self.number # 调用 it = MyIterator() print(it.__next__()) print(it.__next__())

运行结果:

1

2

二、生成器

1、什么是生成器?

答:生成器是懒人版的迭代器,使用yield函数返回数据,一边计算一边循环,可以节省内存。

2、yield与ruturn的区别?

答:return直接返回函数结束,yield暂定到当前位置,下次继续运行。

3、生成器的优点有哪些?

答:省内存、适合大数据/无序数据、惰性计算。

手写一个生成器

def gen(): yield 1 yield 2 yield 3 g = gen() print(next(g)) print(next(g)) print(next(g))

三、装饰器

1、什么是装饰器?

答:不修改原函数代码的基础上,动态给函数加功能,本质上是闭包。

2、装饰器的应用场景?

答:日志记录、性能分析、权限控制、缓存。

手写一个函数装饰器

import time def timer(func): def wrapper(): start = time.time() func() end = time.time() print(end - start) return wrapper @timer def test(): time.sleep(1) test()

带参数的函数装饰器

def log(name): def decorator(func): def wrapper(*args, **kwargs): print(f"{name} 执行函数") return func(*args, **kwargs) return wrapper return decorator @log("测试") def f(): print("hello")

除此之外还有类装饰器:实现__call__方法调用

功能:

(1) 添加修改类的属性或方法

(2) 拦截实例化过程

(3) 实现单例模式、日记记录、权限控制等

添加日志功能:

def log_class(cls): """类装饰器,在调用方法前后打印日志""" class Wrapper: def __init__(self, *args, **kwargs): self.wrapped = cls(*args, **kwargs) # 实例化原始类 def __getattr__(self, name): """拦截未定义的属性访问,转发给原始类""" return getattr(self.wrapped, name) def display(self): print(f"调用 {cls.__name__}.display() 前") self.wrapped.display() print(f"调用 {cls.__name__}.display() 后") return Wrapper # 返回包装后的类 @log_class class MyClass: def display(self): print("这是 MyClass 的 display 方法") obj = MyClass() obj.display()

单例模式代码如下:

class SingletonDecorator: """类装饰器,使目标类变成单例模式""" def __init__(self, cls): self.cls = cls self.instance = None def __call__(self, *args, **kwargs): """拦截实例化过程,确保只创建一个实例""" if self.instance is None: self.instance = self.cls(*args, **kwargs) return self.instance @SingletonDecorator class Database: def __init__(self): print("Database 初始化") db1 = Database() db2 = Database() print(db1 is db2) # True,说明是同一个实例

Python 提供了一些内置的装饰器,例如:

  1. @staticmethod: 将方法定义为静态方法,不需要实例化类即可调用。

  2. @classmethod: 将方法定义为类方法,第一个参数是类本身(通常命名为cls)。

  3. @property: 将方法转换为属性,使其可以像属性一样访问。

代码如下:

class MyClass: @staticmethod def static_method(): print("This is a static method.") @classmethod def class_method(cls): print(f"This is a class method of {cls.__name__}.") @property def name(self): return self._name @name.setter def name(self, value): self._name = value # 使用 MyClass.static_method() MyClass.class_method() obj = MyClass() obj.name = "Alice" print(obj.name)

以上就是总结的一些内容加深理解。

http://www.cnnetsun.cn/news/1663208.html

相关文章:

  • Phi-3-mini-4k-instruct-gguf高算力适配:CUDA加速下RTX3090显存占用仅2.1GB实测
  • Ragflow Docker部署及问题解决方案(界面为Welcome to nginx,ragflow上传文件失败,Docker中的ragflow-cpu-1一直重启)
  • 编程从C语言开始
  • 第198章 万物编译(秀秀)
  • ARM-12-I.MX6U LCD
  • 忍者像素绘卷惊艳效果展示:鸣人螺旋丸像素绘卷作品集
  • UE5开发日志:个人足球游戏demo《SketchSoccer》——后期处理体积实现风格化素描
  • OpenClaw+百川2-13B:5分钟搭建个人微博自动回复机器人
  • 养虾之_给bytebot中Ubuntu系统配置系统国内镜像源_并且安装远程软件remmina/xfreerdp_直接让bytebot远程物理机器干活---AI大模型应用探索0018
  • Pixel Aurora Engine实际项目:像素化数据可视化看板生成技术实践
  • STEP3-VL-10B开源大模型:支持ONNX导出+边缘设备轻量化部署
  • 房屋建筑学-门窗
  • 别再死记硬背了!用PyTorch代码逐行拆解Transformer中的QKV矩阵计算
  • Riffusion 音频生成 API 集成指南
  • Hunyuan-MT-7B GPU部署:Pixel Language Portal在单卡A10上并发处理16路实时语音翻译压测报告
  • OpenClaw技能开发入门:为千问3.5-35B-A3B-FP8编写图片处理插件
  • 3D医学影像分割实战:从数据预处理到模型训练全流程解析
  • 告别黑箱预测:用TFT模型搞定电力负荷与销量预测,还能看懂模型在想什么
  • Wan2.2-I2V-A14B长视频拼接:多段10秒视频无缝衔接生成60秒方案
  • 开源大模型部署教程:Pixel Epic智识终端+AgentCPM-Report零基础搭建
  • Pixel Aurora Engine 提示词安全与内容过滤:构建负责任的AI应用
  • 【仅开放72小时】C++27实验性parallel_unstable_sort_view深度评测:多核排序吞吐达1.2GB/s的编译器flag调优矩阵(附Intel Xeon W9-3400实测数据)
  • SEO_快速见效的SEO实操技巧与工具推荐
  • intv_ai_mk11效果实测:技术面试题生成能力——覆盖算法/系统设计/行为问题
  • 百川2-13B-4bits量化版+OpenClaw:智能家居控制中心改造
  • AI开发效率翻倍:TensorFlow-v2.9镜像完整开发环境实测体验
  • Qwen3智能字幕对齐系统Mathtype公式识别挑战与解决方案
  • Phi-4-mini-reasoning助力VSCode开发:智能代码补全与问题诊断实战
  • 【bilibili-downloader】:突破4K画质限制的B站视频下载工具:给视频收藏爱好者的高效解决方案
  • 设计行业AI转型:从创意出图到落地交付的全流程效率提升