Python_Module
发表于|更新于|Python
|浏览量:
Python Module
文章作者: xhj
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 xhj的博客!
相关推荐
2025-07-12
Python中copy.deepcopy原理与用法
Python 中 copy.deepcopy 的原理和用法1. 基本概念copy.deepcopy() 是 Python 标准库 copy 模块中的一个函数,用于创建对象的深度拷贝(深拷贝)。 123456import copy# 浅拷贝 vs 深拷贝original_list = [1, 2, [3, 4]]shallow_copy = copy.copy(original_list) # 浅拷贝deep_copy = copy.deepcopy(original_list) # 深拷贝 2. 深拷贝的原理工作原理 递归复制:深度拷贝会递归地遍历对象的所有层级,为每一层创建新的对象 完全独立:新对象与原始对象完全独立,修改一个不会影响另一个 处理循环引用:能够正确处理对象间的循环引用关系 实现机制1234567891011121314151617181920212223242526# 简化的深拷贝原理示意def deep_copy(obj, memo=None): if memo is None: memo = {} ...
2025-07-13
Python中functools库的@cache注解的原理与用法
Python functools 库中的 @cache 装饰器@cache 是 Python 3.9+ 中引入的一个装饰器,用于自动缓存函数的结果,基于函数的参数。它是 @lru_cache(maxsize=None) 的简化版本。 原理@cache 的核心原理是 记忆化(Memoization): 参数作为键:将函数的参数转换为哈希键 结果缓存:将函数返回值存储在与参数键对应的缓存中 命中返回:当相同参数再次出现时,直接返回缓存结果,避免重复计算 基本用法12345678910111213from functools import cache@cachedef fibonacci(n): if n < 2: return n return fibonacci(n-1) + fibonacci(n-2)# 首次计算会执行实际计算print(fibonacci(10)) # 55# 相同参数再次调用,直接返回缓存结果print(fibonacci(10)) # 55 (从缓存返回) 与 @lru_cache 的比较12345678910fr...
2024-10-01
1_pythonic
用 Pythonic 方式来思考1. 确认自己使用的 Python 版本没啥好讲的,主要 Python 2 跟 Python 3 有一部分语法的区别。 2. 遵循 PEP8 风格指南 使用空格来表示缩进,而不要使用 tab 12def foo(): pass 和语法有关的每一层缩进都用 4 个空格表示 12def foo(): print("4 spaces") 每行的字符数不该超过 79 个 对于占据多行的长表达式来说,除了首行之外的其余各行都应该在通常的缩进级别上再加上四个空格 1234def foo(): print(1111111111111111111111111111, 1111111111, "前面有 8 个空格", 222222 ) 文件中的函数和类之间应该用两个空行隔开 在同一个类中,各个方法之间应该用一个空行隔开 123456789101112class Cls(): def __init__(): pass def foo(): ...
2024-10-05
5_file_io
File and IO文件和IO读写文本数据12with open("text.txt", "rt", encoding="utf-8") as f: pass 打印输出到文件中12with open("text.log", "wt") as f: print("Test log", file=f) 使用其它分隔符或打印终止符打印12345print('abcd', 1234, sep=',', end='\t')row = ('abcd', 1234, 'bcda', 3)print(','.join(str(x) for x in row))print(*row, sep=",") 读写字节数据12with open("text.bin", "rb") as f:...
2025-07-03
Python_Decorator
Python Decorator基本原理…… 内置装饰器@property@property:把一个方法变成属性调用。 示例一: 把一个 getter 方法变成属性,只需要加上 @property 就可以了,此时,@property 本身又创建了另一个装饰器 @score.setter,负责把一个 setter 方法变成属性赋值。 123456789101112class Student(object): @property def score(self): return self._score @score.setter def score(self, value): if not isinstance(value, int): raise ValueError('score must be an integer!') if value < 0 or value > 100: raise ValueError('score mu...
2024-10-07
7_function
Function函数可接受任意数量参数的函数如果想要构造一个可接受任意数量参数的函数,可以使用 * 参数来定义该函数: 12345def avg(first, *others): return (first + sum(others)) / (1 + len(others))print(avg(1,2)) # 1.5print(avg(1,2,3,4,5)) # 3 为了接受任意数量的关键字参数,可以使用以 ** 开头的参数定义函数: 1234def foo(attr1, attr2, **attrs): print(attr1, attr2, attrs)foo(1, 2, n=1, m=2) # 1 2 {'n':1,'m':2} 综上所述,*args 和 **kwargs 分别是第一章介绍的压缩和字典参数。要求 *args 只能放在最后一个位置参数后面,**kwargs 只能放在最后一个参数后面。 只接受关键字参数的函数将强制关键字参数放到某个 * 参数或者单个 * 后面就能...