Python协程详解

协程 (Coroutine), 是一种比线程更轻量级的存在。它是 单线程里的并发,靠的是 协作式调度,不是操作系统强行切。 为什么需要协程? 想象一个典型场景: 请求 A:等数据库 请求 B:等网络 请求 C:等磁盘 如果你用 同步代码: handle(A) # 卡住 handle(B) handle(C) CPU 大量时间在 等 I/O,很浪费。 协程的思想是: 当我遇到 I/O 等待时,我主动让出 CPU,让别人先跑。 协程 vs 线程 vs 进程 特性 进程 线程 协程 切换开销 最大 中等 最小 内存占用 最大 中等 最小 并发能力 多进程并行 多线程并发 单线程内并发 数据共享 IPC复杂 共享内存, 需要锁 无需锁 创建数量 少量 中量 大量 入门 使用 async/await 语法声明的 协程 是编写 asyncio应用程序 的首选方式。 术语 “协程” 可用于表示两个概念: 一个协程函数:一个 async def 函数; 一个协程对象:调用 协程函数后返回的对象。 ...

2026年01月22日

Python-进阶篇

类与对象 类与对象 类 (Class): 模板,定义属性和方法。 对象 (Object): 类的实例 (Instance)。 # 定义类 class Person: """简单类示例""" species = "人类" # 类变量 def __init__(self, name: str, age: int): self.name = name # 实例变量 self.age = age def greet(self) -> str: # 实例方法 return f"Hi, I'm {self.name}, {self.age} years old." # 创建对象 p = Person("Alice", 30) print(p.greet()) # Hi, I'm Alice, 30 years old. print(Person.species) # 人类 要点: __init__ 是 初始化方法, 在实例创建后被调用。 self 表示当前对象的引用(self虽不是关键字, 但约定俗成), 用来访问对象的属性和方法。方法调用时 Python 自动传入,不需要手动写。 类变量 在所有实例间共享, 实例变量是每个实例独有的。 实例变量/类变量/私有变量 实例变量 (Instance Variables): 属于特定实例(对象)的变量,每个实例都拥有自己独立的一份副本。 特点: 在 __init__ 构造函数 或 其他实例方法中 通过 self.变量名 定义 每个对象的 实例变量值 可以不同 类变量 (Class Variables): 属于类本身的变量,被所有实例共享。 特点: ...

2025年09月01日

Python-入门篇

变量 变量就是 存储数据的容器,用一个名字指向一块内存中的值。 在 Python 中,变量本质上是 对象的引用。 变量命名规则: 只能包含 字母、数字、下划线, 不能以数字开头 不能是 关键字 区分大小写 推荐命名规范(PEP8): snake_case(变量名小写,单词之间用下划线隔开) 用于 变量、函数、方法、模块。 PascalCase 专门用于 类名。 示例: 标识符类型 示例 变量名 user_name, is_valid 函数名 calculate_total(), get_user_data() 方法名 class_instance.update_status() 模块名 my_module.py, data_processor.py 包名 package_name 类名 HttpRequest, User 常用的内置数据类型 Python 中 常用的内置数据类型: 数据类型 中文名 示例 int 整型 10 float 浮点型 3.14 bool 布尔型 True str 字符串 “hello word” NoneType 空类型 None list 列表 [1, 2, 3] tuple 元组 (1, 2, 3) set 集合 {1, 2, 3} dict 字典 {“key”: “value”} Python 是 动态类型语言,不需要显式声明变量类型,解释器会根据赋值自动推断类型。 示例: ...

2025年08月31日