1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314
   | """ 第2课示例代码:async/await 基础语法
  运行方式:     python 02_examples.py """
  import asyncio import time from typing import List
 
 
 
 
 
  async def 简单问候(名字: str) -> str:     """最简单的异步函数"""     print(f"你好,{名字}!")     await asyncio.sleep(1)       print(f"很高兴见到你,{名字}!")     return f"问候完成:{名字}"
 
  async def 示例1_基础语法() -> None:     """示例1:演示基础的 async/await 语法"""     print("\n" + "=" * 50)     print("📚 示例1:最简单的异步函数")     print("=" * 50)
           结果 = await 简单问候("小明")     print(f"返回值:{结果}")
      print("\n💡 关键点:")     print("  1. 用 async def 定义异步函数")     print("  2. 用 await 等待异步操作")     print("  3. await 只能在 async 函数内使用")
 
 
 
 
 
  async def 展示暂停恢复() -> None:     """展示协程如何暂停和恢复"""     print("\n" + "=" * 50)     print("📚 示例2:协程的暂停和恢复")     print("=" * 50)
      print("▶️  步骤1:开始执行")
      print("⏸️  暂停1秒(这时可以执行其他任务)...")     await asyncio.sleep(1)
      print("▶️  步骤2:恢复执行")
      print("⏸️  暂停1秒(这时可以执行其他任务)...")     await asyncio.sleep(1)
      print("▶️  步骤3:继续执行")
      print("⏸️  暂停1秒(这时可以执行其他任务)...")     await asyncio.sleep(1)
      print("✅ 步骤4:完成!")
      print("\n💡 关键点:")     print("  协程在每个 await 处暂停,等待完成后恢复")     print("  暂停期间,程序可以去执行其他协程")
 
 
 
 
 
  async def 烧水() -> str:     """烧水"""     print("🔥 开始烧水...")     await asyncio.sleep(3)     print("💧 水烧开了!")     return "开水"
 
  async def 泡茶(水: str) -> str:     """泡茶"""     print(f"🍵 用{水}泡茶...")     await asyncio.sleep(2)     print("☕ 茶泡好了!")     return "一杯茶"
 
  async def 示例3_函数协作() -> None:     """示例3:多个异步函数协作"""     print("\n" + "=" * 50)     print("📚 示例3:多个异步函数协作")     print("=" * 50)
      开始时间 = time.time()
           水 = await 烧水()     茶 = await 泡茶(水)
      总耗时 = time.time() - 开始时间
      print(f"\n✅ 完成!得到:{茶}")     print(f"⏱️  总耗时:{总耗时:.1f}秒")
      print("\n💡 关键点:")     print("  使用 await 可以在异步函数之间传递数据")     print("  这里是顺序执行:先烧水,再泡茶")
 
 
 
 
 
  async def 制作咖啡(订单号: int, 咖啡类型: str, 制作时间: int) -> str:     """制作一杯咖啡"""     print(f"☕ 订单{订单号}:开始制作{咖啡类型}...")
           for 进度 in range(1, 4):         await asyncio.sleep(制作时间 / 3)         print(f"   订单{订单号}:制作进度 {进度}/3")
      print(f"✅ 订单{订单号}:{咖啡类型}制作完成!")     return f"{咖啡类型}(订单{订单号})"
 
  async def 咖啡店营业_顺序() -> None:     """咖啡店营业 - 顺序处理订单(同步方式)"""     print("\n" + "=" * 50)     print("📚 示例4A:咖啡店 - 顺序处理订单")     print("=" * 50)
      开始时间 = time.time()
      订单列表 = [         (1, "美式咖啡", 3),         (2, "拿铁", 4),         (3, "卡布奇诺", 5),     ]
      完成的咖啡 = []
           for 订单号, 类型, 时间 in 订单列表:         咖啡 = await 制作咖啡(订单号, 类型, 时间)         完成的咖啡.append(咖啡)
      总耗时 = time.time() - 开始时间
      print(f"\n🎉 完成订单:{len(完成的咖啡)}杯")     for 咖啡 in 完成的咖啡:         print(f"  - {咖啡}")     print(f"⏱️  总耗时:{总耗时:.1f}秒")
      print("\n💭 分析:顺序处理,效率较低...")
 
  async def 咖啡店营业_并发() -> None:     """咖啡店营业 - 并发处理订单(异步方式)"""     print("\n" + "=" * 50)     print("📚 示例4B:咖啡店 - 并发处理订单")     print("=" * 50)
      开始时间 = time.time()
      订单列表 = [         (1, "美式咖啡", 3),         (2, "拿铁", 4),         (3, "卡布奇诺", 5),     ]
           任务列表 = [制作咖啡(订单号, 类型, 时间)             for 订单号, 类型, 时间 in 订单列表]
      完成的咖啡 = await asyncio.gather(*任务列表)
      总耗时 = time.time() - 开始时间
      print(f"\n🎉 完成订单:{len(完成的咖啡)}杯")     for 咖啡 in 完成的咖啡:         print(f"  - {咖啡}")     print(f"⏱️  总耗时:{总耗时:.1f}秒")
      print("\n💭 分析:并发处理,效率大大提高!")
 
 
 
 
 
  async def 示例5_常见错误() -> None:     """示例5:演示常见错误和正确做法"""     print("\n" + "=" * 50)     print("📚 示例5:常见错误和正确做法")     print("=" * 50)
           print("\n❌ 错误1:忘记使用 await")     print("代码:结果 = 简单问候('小红')")     结果错误 = 简单问候("小红")       print(f"结果:{结果错误}")     print("说明:这样只会得到协程对象,不会真正执行!")
           print("\n✅ 正确做法:使用 await")     print("代码:结果 = await 简单问候('小红')")     结果正确 = await 简单问候("小红")     print(f"结果:{结果正确}")     print("说明:使用 await 才会真正执行!")
      print("\n💡 记住:")     print("  调用异步函数时,一定要用 await")     print("  否则只会得到协程对象,不会执行")
 
 
 
 
 
  async def 异步倒计时(秒数: int) -> None:     """异步倒计时"""     print(f"\n⏰ 倒计时 {秒数} 秒...")     for i in range(秒数, 0, -1):         print(f"  {i}...")         await asyncio.sleep(1)     print("  🎉 时间到!")
 
  async def 异步进度条(任务名: str, 总步骤: int, 每步耗时: float) -> None:     """异步进度条"""     print(f"\n📊 {任务名}")     for 步骤 in range(1, 总步骤 + 1):         进度百分比 = (步骤 / 总步骤) * 100         进度条 = "█" * 步骤 + "░" * (总步骤 - 步骤)         print(f"  [{进度条}] {进度百分比:.0f}%", end="\r")         await asyncio.sleep(每步耗时)     print(f"  [{'█' * 总步骤}] 100% ✅")
 
  async def 示例6_实用工具() -> None:     """示例6:实用的异步工具函数"""     print("\n" + "=" * 50)     print("📚 示例6:实用的异步工具函数")     print("=" * 50)
           await asyncio.gather(         异步倒计时(5),         异步进度条("下载文件", 10, 0.5)     )
      print("\n💡 关键点:")     print("  可以创建各种实用的异步工具函数")     print("  用 asyncio.gather 可以同时运行多个")
 
 
 
 
 
  async def main() -> None:     """主程序:运行所有示例"""     print("🎓 第2课:async/await 基础语法")     print("=" * 50)
           await 示例1_基础语法()     await 展示暂停恢复()     await 示例3_函数协作()     await 咖啡店营业_顺序()     await 咖啡店营业_并发()     await 示例5_常见错误()     await 示例6_实用工具()
           print("\n" + "=" * 50)     print("🎉 第2课完成!")     print("=" * 50)     print(""" 📚 你学到了什么?     1. async def - 定义异步函数     2. await - 等待异步操作(可以暂停)     3. asyncio.run() - 运行异步程序     4. asyncio.gather() - 同时运行多个任务     5. 协程可以暂停和恢复      🎯 核心语法:     async def 函数名():        # 定义异步函数         结果 = await 异步操作()  # 等待异步操作         return 结果          asyncio.run(函数名())       # 运行异步函数      💪 动手练习:     1. 修改咖啡制作时间,观察效果     2. 增加更多咖啡订单     3. 创建自己的异步函数     4. 完成课后练习题      🎯 下一步:     学习更多并发控制技巧(第3课)     """)
 
  if __name__ == "__main__":          asyncio.run(main())
 
   |