AIGC算法工程师面试中Python基础知识的重点归纳如下:
迭代器:
- 迭代器是可迭代对象的基础,通过iter方法返回迭代器。
- 迭代器实现__iter__方法返回自身,__next__方法返回容器中的下一个值,当无更多元素时抛出StopIteration异常。
生成器:
- 生成器在循环过程中不断推算出后续元素,避免创建完整的列表,提升效率。
- 生成器函数返回生成器对象,使用next方法按需获取元素。
装饰器:
- 装饰器允许向已有函数添加额外功能,通过传递函数实现。
- 常用于记录函数执行信息或插入日志。
深拷贝与浅拷贝:
- 浅拷贝仅复制引用,深拷贝递归复制子对象,确保新对象与原对象完全独立。
- 深拷贝通过copy模块的deepcopy函数实现。
解释语言与编译语言:
- Python是解释语言,逐行由解释器执行,可移植性强,但运行效率较低。
- 编译语言预先编译为机器码,运行效率高。
垃圾回收机制:
- Python使用引用计数算法管理内存,通过标记清除算法解决循环引用问题。
- 采用分代回收算法提高效率。
多线程与GIL:
- Python的多线程由于GIL的存在,无法有效利用多核处理器。
- 适用于I/O密集型任务,可通过多进程或协程缓解GIL问题。
range与xrange:
- xrange是生成器,内存消耗优于range,特别适用于生成大量数据。
- Python 3中xrange已被移除,range实现了类似xrange的功能。
列表与元组:
- 列表是可变对象,支持修改。
- 元组是不可变对象,不支持修改,内存占用更小,适用于大量数据。
互换变量:
- 利用赋值操作的特性,从右向左解析表达式,实现无需临时变量的变量交换。
可变对象与不可变对象:
- 可变对象如list、dict、set,在内存管理、数据安全和性能上有显著差异。
- 不可变对象如tuple、string、int、float、bool。
None的含义:
- None表示空值,是一个特殊Python对象,与False、0、空字符串不同。
*args和kwargs**:
- *args接收非键值对的可变参数列表。
- **kwargs接收键值对的可变参数。
Numpy的broadcasting机制:
- 包括元素数量匹配、维度扩展、数据类型一致等规则,用于简化数组操作。
实例方法、静态方法和类方法:
- 实例方法至少包含self参数。
- 类方法使用cls参数。
- 静态方法不绑定任何对象,无法调用类属性和类方法。
remove、del和pop的区别:
内存优化技巧:
- 使用del和gc.collect手动启动垃圾回收。
- 调整gc.set_threshold控制回收频率。
if a和if a is not None的区别:
- if a检查变量是否为True。
- if a is not None检查变量是否为非空。
is和==的区别:
按值对字典排序:
- Python提供键值排序功能,但按值排序需自定义排序函数。