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

文章目录

说说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的对象有:

  • int
  • float
  • str
  • bool
  • tuple(内部元素也要可hash)

下列是自定义一个可以作为key的对象示例

复制代码
from dataclasses import dataclass
# 会自动生成__eq__和__hash__,且限制对象不可变
@dataclass(frozen=True)
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语句时,函数会暂停并返回一个值给调用者,会保存当前函数执行帧、局部变量和执行指针。下次调用时可以从上次暂停地方继续执行。

相关推荐
高级程序源6 小时前
django校园寻物通失物招领平台32261-计算机课程设计、毕业设计
vue.js·python·mysql·小程序·django·flask·课程设计
WeiXin_DZbishe6 小时前
基于springboot宠物领养系统-计算机毕设 附源码【课程设计】94217
vue.js·spring boot·python·django·php·课程设计
kimnoic7 小时前
Python数据库学习心得:SQLite、MySQL、PostgreSQL优缺点
开发语言·python
snhna7 小时前
向量数据库深度实战:从 HNSW 到 pgvector、Milvus 选型与 RAG 落地
数据库·人工智能·python·postgresql·milvus
必须得开心呀8 小时前
python编写带界面的软件,需要安装哪些插件
开发语言·python
Wx-bishekaifayuan8 小时前
express皖美特色农产品网售系统53118-计算机课程设计、毕业设计
人工智能·spring boot·后端·python·课程设计·express·旅游
青少儿编程课堂8 小时前
迪杰斯特拉(Dijkstra)算法:单源最短路与赛场路线规划
c++·python·算法·bfs·信息学竞赛
计算机编程指导师8 小时前
【计算机毕设推荐】基于Hadoop+Spark的公共交通运营数据分析与可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·计算机·数据分析·spark·交通
Wx-bishekaifayuan8 小时前
springboot汉中旅游服务平台41442-计算机课程设计、毕业设计
spring boot·后端·python·django·课程设计·express·旅游
WeiXin_DZbishe9 小时前
基于springboot城市公交实时运营与调度系统-计算机毕设 附源码【课程设计】66173
java·vue.js·spring boot·后端·python·php·课程设计