Python协程详解

什么是协程 协程 (Coroutine), 也被称为微线程, 是一种比线程更轻量级的存在。简单来说, 协程是一种用户态的轻量级线程, 协程的调度完全由用户控制。 协程 vs 线程 vs 进程 特性 进程 线程 协程 切换开销 最大 中等 最小 内存占用 最大 中等 最小 并发能力 多进程并行 多线程并发 单线程内并发 数据共享 IPC复杂 共享内存, 需要锁 无需锁 创建数量 少量 中量 大量 协程的核心优势: 极低的上下文切换成本 单线程即可实现高并发 避免了多线程的锁竞争问题 代码结构清晰, 逻辑同步 协程的基本概念 生成器 (Generator) 在Python 3.5之前, 协程是通过生成器实现的。生成器是一种特殊的迭代器, 可以在执行过程中暂停和恢复。 def simple_generator(): print("开始执行") yield 1 print("继续执行") yield 2 print("结束执行") # 创建生成器 gen = simple_generator() # 手动迭代 print(next(gen)) # 输出: 开始执行, 1 print(next(gen)) # 输出: 继续执行, 2 print(next(gen)) # StopIteration yield 关键字 yield 类似于 return, 但不会结束函数 每次调用 next() 时, 生成器执行到 yield 并返回值 下次调用 next() 时, 从上次的 yield 继续执行 def countdown(n): print("开始倒计时") while n > 0: yield n n -= 1 for i in countdown(5): print(i) # 输出: # 开始倒计时 # 5 # 4 # 3 # 2 # 1 send() 方法 生成器的 send() 方法可以向生成器内部发送数据: ...

2026年01月17日

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日