当前位置: 首页 > news >正文

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)) # 3

3. 生成器函数 进阶核心用法

(1)带参数的生成器(最常用)

使用场景:动态生成序列、批量数据、分页数据

# 生成从 start 到 end 的数字(步长 step) def number_generator(start, end, step=1): 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 10
(2)生成器 + 条件判断(筛选数据)

使用场景:大数据过滤、日志筛选、数据流处理

# 只生成偶数 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 → 处理后:20
(5)无限生成器(永不停止)

使用场景: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)) # 3

4. 生成器函数 真实使用场景(必看)

场景为什么用生成器?
读取超大文件不一次性加载全部内容,避免内存爆炸
分页接口请求一页一页获取数据,节省内存
实时数据流日志、监控、传感器数据逐一生成
无限序列自增 ID、计数器、随机数序列
大数据处理过滤、映射、转换百万级数据不卡顿

实战示例:读取超大日志文件

# 逐行读取 10GB 日志文件,不占满内存 def read_large_file(file_path): with open(file_path, "r", encoding="utf-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 种基础语法

(1)import 模块名
# 导入整个模块 import math print(math.sqrt(16)) # 4.0
(2)from 模块 import 功能
# 只导入需要的函数/变量 from math import sqrt, pi print(sqrt(25)) # 5.0
(3)from 模块 import *
# 导入所有内容(不推荐,容易命名冲突) from math import *
(4)import 模块 as 别名
# 简化名称(常用!) import numpy as np import pandas as pd

3. 模块导入 进阶规则(重点)

(1)自定义模块(自己写的 .py 文件)

项目结构:

project/ ├── main.py # 主程序 └── utils.py # 自定义模块

utils.py

# 生成器函数 def count_generator(start=1): while True: yield start start += 1 # 普通函数 def add(a, b): return a + b

main.py导入使用:

from utils import count_generator, add gen = count_generator(100) print(next(gen)) # 100 print(add(3,5)) # 8
(2)ifname== "main"(模块必备)

作用:模块被直接运行时才执行,被导入时不执行

utils.py优化:

def add(a, b): return a + b # 只有直接运行此文件时才执行 if __name__ == "__main__": print("测试函数:", add(2,3))
(3)包(Package)导入

文件夹就是,必须包含__init__.py(Python 3.3+ 可省略)

project/ ├── main.py └── mypackage/ ├── __init__.py └── tools.py

导入:

from mypackage.tools import count_generator
(4)相对导入(用于包内部)
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, step=1): 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(prefix="ID-"): num = 1 while True: yield f"{prefix}{num}" num += 1

2. 主程序: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

四、核心知识点总结

生成器函数

  1. yield替代 return,实现暂停 / 恢复执行
  2. 节省内存,适合大数据、无限序列
  3. 常用场景:大文件读取、分页、ID 自增、数据流
  4. 高级用法:yield fromsend()、无限生成器

模块导入

  1. 一个.py就是一个模块
  2. 四种导入方式:import/from ... import/*/as
  3. if __name__ == "__main__"用于模块测试
  4. 包 = 文件夹,用于管理多个模块
  5. 核心价值:代码复用、结构清晰、团队协作

总结

  1. 生成器= 惰性生成数据,内存友好,适合处理大量 / 无限数据
  2. 模块= 代码封装工具,复用性强,让项目结构更清晰
  3. 两者结合 =高质量 Python 项目必备技能
http://www.jsqmd.com/news/650580/

相关文章:

  • 性价比高的灌装机厂家推荐,助力企业高效生产 - myqiye
  • 3分钟掌握AKShare:用Python轻松获取免费金融数据
  • 智慧公厕项目实战:如何用大华DH-IPC-HD4140X-E2实现精准人流量统计与数据分析
  • 如何永久备份QQ空间说说:3步轻松保存你的青春记忆
  • 番茄小说下载器:打造个人永久小说库的完整技术方案
  • 别再只会plot了!Matlab画图时用xlim手动控制坐标轴范围的3个实用场景
  • 2026靠谱的香肠灌装机工厂推荐,真空香肠灌装机工厂选购指南 - 工业推荐榜
  • 别再死记硬背了!用OpenCV的solvePnP函数搞定相机位姿估计(附Python代码实战)
  • TurboVNC 终极指南:如何快速部署高性能远程桌面解决方案
  • LangChain Tools实战避坑:用Pydantic给你的Agent工具加上‘输入验证锁’
  • 沃尔玛购物卡回收新方法,省钱又省心! - 团团收购物卡回收
  • 智慧农业小程序开发实战:从源码解析到农场管理系统搭建
  • 热议氦气检漏设备品牌商,哪家质量可靠值得选 - mypinpai
  • 从数据库‘去重’到网络分区:深入聊聊等价关系在计算机系统里的那些实战应用
  • Python基础与安全
  • 盘点2026年口碑好的氦气检漏设备生产商,哪家性价比高 - 工业品网
  • DeepSeek-R1-Distill-Qwen-7B保姆级教程:3步快速部署推理模型
  • 从微信好友到推荐算法:‘结构洞’理论如何悄悄影响你的信息茧房?
  • 性价比高的订制傢私企业盘点,为你揭秘价格与品质的平衡点 - 工业品牌热点
  • 终极指南:高效部署Proxmox VE虚拟桌面基础设施(VDI)客户端
  • SAP付款条件OBB8配置实战:从“货到付款”到“3/10, 2/20, N/30”的保姆级教程
  • 如何用Fillinger脚本让Illustrator自动完成90%的图案填充工作
  • 什么是P2P内网穿透
  • 高效跨平台m3u8视频下载器:一站式解决视频下载难题
  • 告别抓瞎!用Wireshark实战解析1905协议数据帧(从以太帧到CMDU)
  • 智能汽车竞速赛完全模型组:从裁判视角解析高效执裁要点
  • 材料热力学计算技术革新:pycalphad如何重塑合金设计与相图预测
  • 北京理工大学BIThesis LaTeX模板:3步搞定毕业论文格式难题
  • 基于eNSP的企业级网络规划与仿真:从需求分析到全功能测试的毕业设计实践指南
  • 别人家的调度平台!深圳制造名企用 Apache DolphinScheduler 实现 1 天内数十个工厂部署