Python_Metaclass
发表于|更新于|Python
|浏览量:
Python Metaclass
参考资料
文章作者: xhj
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 xhj的博客!
相关推荐
2024-10-06
6_data_coding
Data and Coding数据编码和处理读写 csv 文件csv 文件为逗号分隔符文件,指定逗号作为每一项数据的分隔符,存储维护一个类似表格的文件。对于 Python 来说,一般用 csv 库解决它的读写问题。 读 csv 文件 将 csv 文件中的数据读取为一个元组的序列: 1234567import csvwith open("data.csv") as f: f_csv = csv.reader(f) headers = next(f_csv) # 取第一行数据,一般而言第一行是标题 for row in f_csv: pass # row:数据行,是一个列表,通过下标取数据。 下标访问数据可能会引起混淆,可以考虑使用命名元组。 12345678from collections import namedtuplewith open("data.csv") as f: f_csv = csv.reader(f) headers = next(f_c...
2025-07-14
Python中threading库用法详解
python threading库中,start()、join()方法的用法是什么?daemo参数的含义是什么? 我来详细解释 Python threading 库中的这些重要概念。 start() 方法start() 方法用于启动线程,使其开始执行。 123456789101112131415import threadingimport timedef worker(): print("线程开始执行") time.sleep(2) print("线程执行完毕")# 创建线程t = threading.Thread(target=worker)# 启动线程t.start() # 线程开始执行print("主线程继续执行") 特点: 每个线程只能调用一次 start() 调用后线程进入就绪状态,等待 CPU 调度 立即返回,不会阻塞主线程 join() 方法join() 方法用于等待线程执行完成。 1234567891011121314151617181920212223import thread...
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...
2021-07-21
复盘|天堂硅谷·数字经济算法编程大赛
复盘|天堂硅谷·数字经济算法编程大赛题目-01 化学反应【模拟】按题意模拟(可以用大根堆或者平衡树),每次找两个最大的出来,直到没有剩余或只剩一个。 1 2 3 4 5 6 7 8 9 #平衡树 from sortedcontainers import SortedList class Solution: def lastMaterial(self, material: List[int]) -> int: s = SortedList(material) while len(s) > 1: a, b = s.pop(), s.pop() if a != b: s.add(a - b) return s[0] if s else 0 1 2 3 4 5 6 7 8 9 #大根堆 class Solution: def lastMaterial(self, material: List[int]) -> int: ...
2024-10-02
2_function
函数18. 用数量可变的位置参数减少视觉杂讯首先看第一段代码: 1234567891011def foo(message, values): if not values: print(message) else: print("%s: %s"%(message, ",".join([str(v) for v in values])))foo("my numbers are", [1,2,3])# my numbers are: 1,2,3foo("no numbers.", [])# no numbers. 可以看出,第二次不输入 values 时的调用不是很优雅,而由于之前定义过 foo 函数必须要传 values 这个参数,因此只能按照这样的调用方法。为了避免这样没有意义的空 list 传入,可以使用 * 星号参数来避免掉第二次调用的空 list。修改后的代码如下: 1234567891011def foo(message, *values): if...
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 只能放在最后一个参数后面。 只接受关键字参数的函数将强制关键字参数放到某个 * 参数或者单个 * 后面就能...