Python零基础到精通教程,函数进阶与模块导入

张开发
2026/4/16 14:38:39 15 分钟阅读

分享文章

Python零基础到精通教程,函数进阶与模块导入
本文包含生成器函数核心用法、高级技巧、模块导入全规则、真实使用场景学完就能直接在项目中使用。一、生成器函数进阶1. 什么是生成器函数使用yield关键字不是 return调用时不立即执行代码返回一个生成器对象每次迭代时才执行到yield暂停并返回值下次从暂停处继续最大优势节省内存不一次性生成所有数据2. 基础语法回顾# 最简单的生成器 def my_generator(): yield 1 yield 2 yield 3 # 使用 gen my_generator() # 得到生成器对象 print(next(gen)) # 1 print(next(gen)) # 2 print(next(gen)) # 33. 生成器函数 进阶核心用法1带参数的生成器最常用使用场景动态生成序列、批量数据、分页数据# 生成从 start 到 end 的数字步长 step def number_generator(start, end, step1): current start while current end: yield current current step # 生成 1~10 偶数 for num in number_generator(2, 10, 2): print(num) # 2 4 6 8 102生成器 条件判断筛选数据使用场景大数据过滤、日志筛选、数据流处理# 只生成偶数 def even_generator(max_num): for i in range(max_num 1): if i % 2 0: yield i # 使用 for n in even_generator(10): print(n)3生成器嵌套yield from使用场景拆分复杂逻辑、多级数据生成def part1(): yield 1 yield 2 def part2(): yield 3 yield 4 # 合并两个生成器 def full_generator(): yield from part1() yield from part2() # 输出 1 2 3 4 for n in full_generator(): print(n)4生成器 send () 方法高级交互使用场景动态控制生成器、实时传参调整逻辑def control_generator(): result yield 开始 print(f收到外部数据{result}) yield f处理后{result * 2} gen control_generator() print(next(gen)) # 开始 print(gen.send(10)) # 收到外部数据10 → 处理后205无限生成器永不停止使用场景ID 自增、计数器、数据流、心跳包# 无限自增 ID def id_generator(): num 1 while True: yield num num 1 # 使用 gen id_generator() print(next(gen)) # 1 print(next(gen)) # 2 print(next(gen)) # 34. 生成器函数 真实使用场景必看场景为什么用生成器读取超大文件不一次性加载全部内容避免内存爆炸分页接口请求一页一页获取数据节省内存实时数据流日志、监控、传感器数据逐一生成无限序列自增 ID、计数器、随机数序列大数据处理过滤、映射、转换百万级数据不卡顿实战示例读取超大日志文件# 逐行读取 10GB 日志文件不占满内存 def read_large_file(file_path): with open(file_path, r, encodingutf-8) as f: for line in f: yield line.strip() # 使用 for line in read_large_file(large.log): if ERROR in line: print(发现错误, line)二、模块导入 完整学习新手必懂1. 什么是模块一个.py文件就是一个模块用于代码拆分、复用、维护把函数、变量、类放在独立文件中2. 模块导入 4 种基础语法1import 模块名# 导入整个模块 import math print(math.sqrt(16)) # 4.02from 模块 import 功能# 只导入需要的函数/变量 from math import sqrt, pi print(sqrt(25)) # 5.03from 模块 import *# 导入所有内容不推荐容易命名冲突 from math import *4import 模块 as 别名# 简化名称常用 import numpy as np import pandas as pd3. 模块导入 进阶规则重点1自定义模块自己写的 .py 文件项目结构project/ ├── main.py # 主程序 └── utils.py # 自定义模块utils.py# 生成器函数 def count_generator(start1): while True: yield start start 1 # 普通函数 def add(a, b): return a bmain.py导入使用from utils import count_generator, add gen count_generator(100) print(next(gen)) # 100 print(add(3,5)) # 82ifname main模块必备作用模块被直接运行时才执行被导入时不执行utils.py优化def add(a, b): return a b # 只有直接运行此文件时才执行 if __name__ __main__: print(测试函数, add(2,3))3包Package导入文件夹就是包必须包含__init__.pyPython 3.3 可省略project/ ├── main.py └── mypackage/ ├── __init__.py └── tools.py导入from mypackage.tools import count_generator4相对导入用于包内部from .tools import func # 同级目录 from ..utils import helper # 上级目录4. 模块导入 真实使用场景场景作用项目拆分把登录、数据库、工具函数分开代码复用一个函数多处导入使用不用复制避免冲突不同模块同名函数不会干扰团队协作每人负责不同模块最后整合第三方库导入 numpy/pandas/torch 等库三、生成器 模块导入 综合实战把生成器函数封装到模块里实现高复用、低内存、结构化项目。项目结构my_project/ ├── main.py └── data_generator.py # 生成器模块1. 模块文件data_generator.py# 数据生成器模块 # 1. 数字序列生成器 def number_seq(start, end, step1): current start while current end: yield current current step # 2. 过滤生成器只保留偶数 def even_filter(num_gen): for num in num_gen: if num % 2 0: yield num # 3. 无限ID生成器 def id_gen(prefixID-): num 1 while True: yield f{prefix}{num} num 12. 主程序main.py# 导入自定义模块中的生成器 from data_generator import number_seq, even_filter, id_gen # 1. 使用序列生成器 print(1~10 数字) for n in number_seq(1, 10): print(n, end ) # 2. 使用过滤生成器 print(\n偶数) seq number_seq(1, 20) for n in even_filter(seq): print(n, end ) # 3. 使用ID生成器 print(\n自动ID) gen id_gen(USER-) for _ in range(5): print(next(gen))运行结果1~10 数字 1 2 3 4 5 6 7 8 9 10 偶数 2 4 6 8 10 12 14 16 18 20 自动ID USER-1 USER-2 USER-3 USER-4 USER-5四、核心知识点总结生成器函数yield替代 return实现暂停 / 恢复执行节省内存适合大数据、无限序列常用场景大文件读取、分页、ID 自增、数据流高级用法yield from、send()、无限生成器模块导入一个.py就是一个模块四种导入方式import/from ... import/*/asif __name__ __main__用于模块测试包 文件夹用于管理多个模块核心价值代码复用、结构清晰、团队协作总结生成器 惰性生成数据内存友好适合处理大量 / 无限数据模块 代码封装工具复用性强让项目结构更清晰两者结合 高质量 Python 项目必备技能

更多文章