华为OD技术面真题 - Python开发 - 4

张开发
2026/4/13 8:44:19 15 分钟阅读

分享文章

华为OD技术面真题 - Python开发 - 4
文章目录说说python中的迭代器迭代器和可迭代对象的区别对象能不能作为字典的key有用过with statement吗它的好处是什么说说python中__setattr__、__getattr__、__delattr__方法python中pass的作用python字典和json的区别yeild和return的区别说说python中的迭代器迭代器本质是一个可以被逐个取值的对象。迭代器特点是不一次性加载全部数据、按需返回下一个值。依赖于两个方法__iter__返回一个迭代器本身__next__返回迭代器的下一个值。迭代器的作用解决大数据问题(不需要一次性读取所有数据节省内存)认为拥有__iter__和__next函数的类就是迭代器下面是一个自定义迭代器示例class MyIterator: def __init__(self, n): self.n n self.current 0 def __iter__(self): return self def __next__(self): if self.current self.n: self.current 1 return self.current else: raise StopIteration迭代器和可迭代对象的区别可迭代对象只要实现了__iter__(),就是可迭代对象。本质是一个数据容器能够被遍历的对象。特点可以使用for遍历不能直接使用next迭代器同时实现了__iter()和__next()方法。本质是一个遍历工具执行遍历的对象。特点可以next()可以记录当前位置一次性消费不能回溯。对象能不能作为字典的key只有满足一下条件的对象才能作为字典的key可哈希(需要使用hash值确定位置)不可变(可变会导致位置发生错乱)常见可以作为key的对象有intfloatstrbooltuple(内部元素也要可hash)下列是自定义一个可以作为key的对象示例from dataclasses import dataclass # 会自动生成__eq__和__hash__且限制对象不可变 dataclass(frozenTrue) class Point: x: int y: int有用过with statement吗它的好处是什么with语句的作用是简化“资源管理获取 释放”的语法糖它底层依赖上下文管理器机制,例如常见一种使用方式。with open(input.txt, w) as f: f.write(Hi there!)使用with statement的好处自动释放资源防止资源泄漏异常安全出现异常情况资源仍然可以释放更优雅的代码实现要使用with的条件必须实现两个方法__enter__()__exit__()上面示例等同于下面代码f_obj open(input.txt, w) # 创建文件对象上下文管理器 f f_obj.__enter__() # 进入上下文打开文件 try: f.write(Hi there!) finally: f_obj.__exit__(None, None, None) # 退出上下文关闭文件说说python中__setattr__、__getattr__、__delattr__方法__setattr__方法触发时机给类设置属性时触发。常见用途属性校验自动转换类型限制字段__getattr__方法触发时间获取不存在属性时调用一般用于兜底。常见用途动态属性兼容旧字段默认值__delattr__:触发时机删除属性时调用常见用途保护关键字段。限制属性不能被删除删除时记录日志删除时额外清理操作(资源释放等)python中pass的作用占位符在编写代码时只写框架思路具体实现还未编写就可以用 pass 进行占位使程序不报错不会进行任何操作。python字典和json的区别主要区别字典是一种数据结构(哈希表)。json是数据的一种表现形式。字典的key只要能hash和不可变就行。json的键必须为字符串。yeild和return的区别return: 一旦执行了return语句函数就会结束执行并且所有局部变量变成不可访问对象结束作用域。yeild: 每当执行yield语句时函数会暂停并返回一个值给调用者会保存当前函数执行帧、局部变量和执行指针。下次调用时可以从上次暂停地方继续执行。

更多文章