1. 模块概述
- 定义:Python中一个以
.py结尾的源文件即为一个模块(Module),可以包含变量、函数和类等。其实就是说一个文件就是一个模块 - 优点:提高代码的可维护性和复用性,避免名称冲突。只需编写一次,其他程序即可导入使用。
2. 模块的使用
2.1 创建模块
模块名区分大小写,且不能与Python自带的标准模块重名。
# 示例:my_add.py
num = 100
def add(a, b):
"""求两个数的和"""
return a + b
2.2 导入模块
(1)全部导入 import
- 语法:
import 模块名 as 别名后面的as 别名 你要用的话就要,不用的话就不要。 - 调用:
模块名.成员名或别名.成员名 - 特点:即使多次使用
import导入同一模块,模块也只会被导入一次。
# 导入模块
import my_add as a1
# 使用模块
print(a1.add(1, 2))
print(a1.num)
(2)局部导入 from import
- 语法:
from 模块名 import 成员名1 [as 别名], ...[as 别名] 需要起别名就要,不需要起别名就不要 - 调用:直接通过
成员名调用。 - 特点:只能使用其导入的成员。如果多个模块存在重名成员,后一次导入会覆盖前一次。
#创建新的模块my_multi.py
num =200
_str1="abc"
def multi(a, b):
"""求两个数的积"""
return a * b
只能使用导入的成员
#只能使用导入的成员
from my_add import add
print(add(1, 2))
print(num) # NameError: name 'num' is not defined
重名变量,后一次导入会覆盖前一次导入
# 导入模块
from my_add import add,num
from my_multi import num
(3)全部局部导入 from import *
- 语法:
from 模块名 import * - 特点:导入模块中所有不以单下划线开头的成员。
2.3 模块搜索顺序
当导入模块时,系统会按以下顺序查找:
- 当前目录。
PYTHONPATH环境变量中的目录。- 标准库及依赖目录。
提示:可通过 import sys; print(sys.path) 查看搜索顺序,或通过 sys.path.append("路径") 临时添加搜索路径。
3. 模块内置属性和内置函数
3.1 __all__ 变量
专门针对 from import * 生效,用于设置模块中哪些内容允许被导入。
# my_add.py
__all__ = ["num", "add"] # 列表内为字符串形式
3.2 __name__ 变量
特殊内置变量,用于判断文件是被直接运行还是作为模块被导入。
- 直接运行:该文件的
__name__属性值为"__main__",也就是直接运行的就是这个文件,这个相当于核心启动文件 - 被导入时:该文件的
__name__属性值为模块的名称(文件名)。
典型用法:避免导入模块时测试代码被直接执行。
if __name__ == "__main__":
# 这里的代码只有在直接运行当前文件时才会执行
print(add(10, 20))
3.3 dir() 函数
dir() 是一个内置函数,主要用于列出对象的属性和方法,或者列出当前作用域中定义的名称,并以一个字符串列表的形式返回。 当你将一个模块作为 dir() 的参数时,它会返回该模块中定义的名称列表,包括函数、类、变量等
dir(模块):返回该模块中定义的名称列表。dir(对象):返回该对象的属性和方法列表。dir():不带参数,列出当前作用域定义的名称。
4. 包 (Package)
4.1 包概述
包是一种管理Python模块命名空间的形式,通过 .模块名(如 A(包名).B(文件名))来组织。通常我们将多个有联系的模块放入一个包中,构成一个包,和别的语言的包的没啥区别。
- 核心特征:包与文件夹相似,但文件夹下必须包含一个
__init__.py文件(可以为空)。 - 结构示例:
sound/ 最高层级的包 __init__.py 初始化 sound 包 formats/ 用于文件格式转换的子包 __init__.py wavread.py ... effects/ 用于音效的子包 __init__.py echo.py ...
4.2 创建包
和创建py 文件一样,可以创建包。创建包以后IDE会自动给你生成一个__init__.py,这个文件可以作为一个标识,Python 解释器就会将该文件夹视为一个包(Package) ,而不是一个普通的目录。也可以
包的初始化(Initialization) : 当你第一次导入这个包或者包里的任何模块时,__init__.py 中的代码会自动被执行一次。因此,它常用来做一些初始化工作。还可以控制包的导出接口(Public API): 用来决定对外暴露哪些模块、类或函数,隐藏内部实现细节。其他后面的两点和别的包的作用差不多。
4.3 导入包
假设有包 graphic 及其下的模块 circle:
- 全局导入:
import graphic.circle-> 调用:graphic.circle.area(10) - 局部导入模块:
from graphic import circle-> 调用:circle.area(10) - 局部导入成员:
from graphic.circle import area-> 调用:area(10)\
上面的局部导入是导入单个成员,如果想导入所有的子模块,很容易想到使用 from 包名 import * ,
实际这样写Python并不会查找并导入包的所有子模块,因为这将花费很长的时间,并且可能会产生我们不想要的副作用,唯一的解决办法是提供包的显式索引。如果包的 init.py 中定义了 all,运行 from import * 时,它就是被导入的模块名列表.必须要配合 __init__.py 文件中的 __all__ = ["模块名1", "模块名2"] 才能生效。
# graphic/__init__.py
__all__ = ["circle"] # 只允许星号导入 circle 模块
# main.py
from graphic import * # 语法:from 包名 import *
print(circle.area(10)) # 正常运行
print(rectangle.area(10)) # 报错,因为 rectangle 不在 __all__ 列表中,没有被导入
5. 标准库与第三方库
5.1 常用标准库
Python安装时自带的库:
os,sys:操作系统接口与系统参数time,datetime:时间与日期操作math,random:数学和随机数json:JSON编码器和解码器re:正则表达式collections:增强型容器functools:高阶函数,以及可调用对象上的操作hashlib:安全哈希与消息摘要urllib,socket,smtplib:URL处理、低层级网络接口与邮件处理zlib,gzip,bz2:各类数据压缩与解压支持multiprocessing,threading:基于进程与线程的并行copy:浅层及深层拷贝操作shutil,glob:高阶文件操作及 Unix 风格路径模式扩展
5.2 引入第三方库
pip (Package Installer for Python) 是 Python 官方推荐的包管理工具。它就像是手机上的“应用商店”,让你能够非常方便地查找、下载、安装和卸载第三方的 Python 代码库(比如 requests、numpy 等)。
以下是我们在日常开发中最常用到的 pip 操作:
1. 基础命令(增删改查)
- 安装包
pip install 包名 # 示例:pip install requests - 卸载包
执行时会提示你输入pip uninstall 包名 # 示例:pip uninstall requestsy确认卸载。 - 查看已安装的包
这会列出当前环境下所有安装的第三方库以及它们的版本号。pip list - 查看某个包的具体信息(如版本、安装路径、依赖项)
pip show 包名
2. 版本控制与更新
- 安装指定版本的包
如果最新的包和你的代码不兼容,你可以指定版本号:
(还可以用pip install 包名==版本号 # 示例:pip install django==3.2.0>=或<=限制版本范围) - 更新已安装的包到最新版
pip install --upgrade 包名 # 或者简写为:pip install -U 包名
3. 项目依赖管理(非常重要)
当你把代码发给同事或部署到服务器时,别人需要知道你的代码依赖了哪些包。
- 导出当前环境的所有包到文件(通常命名为
requirements.txt)pip freeze > requirements.txt - 别人拿到代码后,一键安装所有依赖
pip install -r requirements.txt
4. 解决下载慢的问题(换源)
因为 pip 默认从国外的官方服务器下载包,国内经常会遇到下载极慢甚至断开报错(Timeout)的情况。通常我们会把下载源切换到国内的镜像站。
常用的国内镜像源:
- 清华大学:
https://pypi.tuna.tsinghua.edu.cn/simple - 阿里云:
http://mirrors.aliyun.com/pypi/simple/ - 豆瓣:
http://pypi.douban.com/simple/
方法一:单次临时使用(在安装命令后加上 -i 参数)
pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple
方法二:永久配置(推荐,一劳永逸)
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
设置完毕后,以后直接 pip install 就会自动从国内源飞速下载了。