python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python导包

零基础学习Python中四大核心导包语法

作者:卷心菜狗

这篇文章主要为大家详细介绍了Python中四大核心导包语法,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以跟随小编一起学习一下

1. 导包的核心概念:模块与包

在学习导包前,必须先分清模块(Module)和 包(Package)这两个新手最容易混淆的概念。

1.1 模块(Module)

简单理解:一个.py文件就是一个模块,文件里可以定义函数、类、变量,也可以写可执行的代码。

模块是Python代码复用的最小单位

比如你写了一个calculator.py文件,里面定义了加减乘除函数,这个文件就是一个模块

1.2 包(Package)

简单理解:一个包含__init__.py文件的文件夹就是一个包,文件夹里可以放多个模块(.py文件),也可以嵌套子包。

包是模块的集合,用于组织和管理多个相关的模块

比如你可以创建一个ai_tools包,里面放math_utils.py(高数工具)、linear_algebra.py(线代工具)、data_loader.py(数据加载)等模块

注意:Python 3.3+版本中,init.py不是必须的,但新手建议保留,它可以标识该文件夹是一个Python包

1.3 两者的关系

模块是单个.py文件,包是包含多个模块的文件夹

包可以包含子包,子包本质上也是一个包

导包时,既可以导入整个模块/包,也可以导入模块/包中的具体函数、类或变量

2. 为什么要导包

导包的核心价值和循环类似,都是为了减少代码冗余,提升开发效率,具体体现在:

1.代码复用:不用重复编写相同的函数/类,直接导入已有的模块即可使用

比如你需要计算正弦函数,不用自己写实现,直接导入Python标准库的math模块即可

2.代码组织:将相关的功能拆分到不同的模块/包中,让代码结构更清晰,便于维护

比如做AI大模型项目时,可以把数据处理、模型定义、训练逻辑分别放在不同的模块里

3.避免命名冲突:不同模块可以有同名的函数/类,通过模块名区分,不会冲突

比如math模块有sin函数,你自己的模块也可以有sin函数,导入时用math.sin和my_module.sin区分即可

3. Python四大核心导包语法(必学)

Python提供了多种导包语法,每种语法适用场景不同,新手必须全部掌握,下面逐一讲解。

3.1 语法1:import 模块名

代码示例(以标准库math模块为例,关联高数)

# 1. 导入整个math模块
import math
# 2. 通过模块名调用函数/变量
# 计算圆周率π(math.pi是math模块中的变量)
print("圆周率π的值:", math.pi)  # 输出:3.141592653589793
# 计算正弦函数sin(π/2)(关联高数三角函数)
sin_value = math.sin(math.pi / 2)
print("sin(π/2)的值:", sin_value)  # 输出:1.0
# 计算平方根√16(关联高数基本运算)
sqrt_value = math.sqrt(16)
print("√16的值:", sqrt_value)  # 输出:4.0

3.2 语法2:import 模块名 as 别名

适用场景:模块名较长(比如第三方库numpy 、pandas),或者需要频繁使用模块时

代码示例(以第三方库numpy为例,关联线代,新手先了解语法即可)

# 1. 导入numpy模块,起别名np(行业通用别名,新手要记住)
import numpy as np
# 2. 通过别名np调用函数
# 创建一个2×3的矩阵(关联线代矩阵概念)
matrix = np.array([[1, 2, 3], [4, 5, 6]])
print("2×3矩阵:\n", matrix)
# 输出:
# [[1 2 3]
#  [4 5 6]]
# 计算矩阵的转置(关联线代矩阵转置)
transpose_matrix = matrix.T
print("矩阵的转置:\n", transpose_matrix)
# 输出:
# [[1 4]
#  [2 5]
#  [3 6]]

3.3 语法3:from 模块名 import 函数名/类名/变量名

代码示例

# 1. 从math模块中导入指定的函数和变量
from math import pi, sin, sqrt
# 2. 直接使用函数名/变量名,不需要写math.
print("圆周率π的值:", pi)
print("sin(π/2)的值:", sin(pi / 2))
print("√16的值:", sqrt(16))
# 3. 也可以一次导入多个,用逗号分隔
from math import cos, tan, log
print("cos(0)的值:", cos(0))  # 输出:1.0

进阶:from 包名 import 模块名

如果是导入包中的模块,语法类似:

# 假设你有一个ai_tools包,里面有math_utils.py模块
from ai_tools import math_utils
# 使用时通过模块名调用
math_utils.my_sin(pi / 2)

3.4 语法4:from 模块名 import *

代码示例(不推荐)

# 从math模块中导入所有内容
from math import *
# 直接使用
print(pi)
print(sin(pi / 2))

3.5 四种导包语法对比总结

导包语法调用方式优点缺点推荐指数
import 模块名模块名.函数()命名空间清晰,无冲突代码稍长⭐⭐⭐⭐
import 模块名 as 别名别名.函数()代码简洁,解决长模块名问题别名需规范⭐⭐⭐⭐⭐
from 模块名 import 函数函数()代码最简洁易命名冲突⭐⭐⭐
from 模块名 import *函数()代码简洁极易冲突,可读性差

4. 自定义模块与包的开发

学会导入别人的模块后,新手也要学会自己创建模块和包,这是代码复用的基础。

4.1 自定义模块

自定义模块非常简单,只需要创建一个.py文件,在里面写函数、类或变量即可。

步骤1:创建模块文件

在当前目录下创建一个my_calculator.py文件,内容如下(带详细注释):

# my_calculator.py - 自定义计算器模块
# 定义模块级变量(可以被导入)
PI = 3.1415926  # 模拟圆周率
# 定义加法函数
def add(a, b):
    """计算两个数的和"""
    return a + b
# 定义减法函数
def subtract(a, b):
    """计算两个数的差"""
    return a - b
# 定义乘法函数
def multiply(a, b):
    """计算两个数的积"""
    return a * b
# 定义除法函数
def divide(a, b):
    """计算两个数的商,除数不能为0"""
    if b == 0:
        raise ValueError("除数不能为0")  # 抛出异常
    return a / b
# 定义私有函数(以下划线开头,不会被from module import *导入)
def _private_function():
    """这是一个私有函数,仅在模块内部使用"""
    print("这是私有函数,外部不应该直接调用")
# 模块的测试代码(仅在直接运行该模块时执行,导入时不执行)
if __name__ == "__main__":
    print("测试my_calculator模块:")
    print("1 + 2 =", add(1, 2))
    print("5 - 3 =", subtract(5, 3))
    print("2 × 3 =", multiply(2, 3))
    print("6 ÷ 2 =", divide(6, 2))

步骤2:导入并使用自定义模块

在同一目录下创建一个test_module.py文件,导入并使用刚才的my_calculator模块:

# test_module.py - 测试自定义模块
# 方式1:导入整个模块
import my_calculator
print("方式1:")
print("PI的值:", my_calculator.PI)
print("3 + 4 =", my_calculator.add(3, 4))
# 方式2:导入指定函数
from my_calculator import subtract, multiply
print("\n方式2:")
print("10 - 5 =", subtract(10, 5))
print("4 × 5 =", multiply(4, 5))
# 方式3:导入模块并起别名
import my_calculator as mc
print("\n方式3:")
print("8 ÷ 2 =", mc.divide(8, 2))

4.2 自定义包

当模块越来越多时,需要用包来组织管理,下面创建一个简单的ai_utils包,包含两个模块。

步骤1:创建包的目录结构

在当前目录下创建如下文件夹和文件:

ai_utils/                # 包的根文件夹
    __init__.py          # 包的标识文件(可以为空,也可以写初始化代码)
    math_tools.py        # 高数工具模块
    linear_algebra.py    # 线代工具模块
一键获取完整项目代码
步骤2:编写包中的模块
math_tools.py(高数工具模块):
# ai_utils/math_tools.py - 高数工具模块
import math
# 计算正弦函数(角度制转弧度制)
def sin_degree(degree):
    """输入角度,返回正弦值"""
    radian = math.radians(degree)  # 角度转弧度
    return math.sin(radian)
# 计算余弦函数(角度制)
def cos_degree(degree):
    """输入角度,返回余弦值"""
    radian = math.radians(degree)
    return math.cos(radian)
linear_algebra.py(线代工具模块,简化版):
# ai_utils/linear_algebra.py - 线代工具模块
# 计算两个向量的点积(关联线代向量点积)
def vector_dot_product(v1, v2):
    """计算两个列表表示的向量的点积,要求长度相同"""
    if len(v1) != len(v2):
        raise ValueError("两个向量长度必须相同")
    # 用zip并行遍历两个向量,对应元素相乘后求和
    return sum(a * b for a, b in zip(v1, v2))
一键获取完整项目代码
__init__.py(可以为空,也可以写初始化代码,比如导入常用模块):
# ai_utils/__init__.py - 包的初始化文件
# 可选:导入包中的常用模块,方便用户直接从包导入
from . import math_tools
from . import linear_algebra

步骤3:导入并使用自定义包

在同一目录下创建test_package.py文件,导入并使用ai_utils包:

# test_package.py - 测试自定义包
# 方式1:导入包中的模块
from ai_utils import math_tools, linear_algebra
print("方式1:")
print("sin(30°) =", math_tools.sin_degree(30))  # 输出:0.5
print("向量[1,2,3]和[4,5,6]的点积:", linear_algebra.vector_dot_product([1,2,3], [4,5,6]))  # 输出:32
# 方式2:从模块中导入指定函数
from ai_utils.math_tools import cos_degree
print("\n方式2:")
print("cos(60°) =", cos_degree(60))  # 输出:0.5

5. 新手必学的Python标准库(含高数/线代关联)

Python自带了丰富的标准库,无需安装即可使用,下面推荐几个新手必学的标准库,部分关联你的AI学习目标。

5.1 math模块(高数基础)

作用:提供数学运算函数,包括三角函数、指数对数、常数等,是高数学习的好帮手

常用函数/变量:

5.2 random模块(随机数生成)

作用:生成随机数、随机选择元素,常用于数据增强、随机采样等AI场景

常用函数:

import random
# 生成0-1之间的随机浮点数
print(random.random())
# 生成指定范围内的随机整数(左闭右闭)
print(random.randint(1, 10))  # 生成1-10的整数
# 从列表中随机选择一个元素
fruits = ["苹果", "香蕉", "橙子"]
print(random.choice(fruits))
# 从列表中随机选择多个元素(不重复)
print(random.sample(fruits, 2))
# 打乱列表的顺序(原地修改)
random.shuffle(fruits)
print(fruits)

5.3 os模块(文件/目录操作)

作用:与操作系统交互,处理文件和目录,常用于AI项目中的数据加载、路径处理

常用函数:

import os
# 获取当前工作目录
print("当前目录:", os.getcwd())
# 列出指定目录下的所有文件和文件夹
print("目录内容:", os.listdir("."))  # "."表示当前目录
# 创建目录(如果不存在)
if not os.path.exists("test_dir"):
    os.mkdir("test_dir")
# 拼接路径(跨平台兼容,Windows用\,Linux用/)
file_path = os.path.join("test_dir", "test.txt")
print("文件路径:", file_path)
# 判断文件/目录是否存在
print("文件是否存在:", os.path.exists(file_path))
print("是否是目录:", os.path.isdir("test_dir"))
print("是否是文件:", os.path.isfile(file_path))

5.4 sys模块(系统相关)

作用:与Python解释器交互,获取命令行参数、修改模块搜索路径等

常用函数/变量:

import sys
# 获取Python版本
print("Python版本:", sys.version)
# 获取命令行参数(运行脚本时传入的参数)
print("命令行参数:", sys.argv)
# 获取模块搜索路径(Python导包时会从这些路径找模块)
print("模块搜索路径:", sys.path)
# 退出程序
# sys.exit()

6. 导包的常见错误与避坑指南

6.1 错误1:ModuleNotFoundError(找不到模块)

错误原因:Python在模块搜索路径中找不到你要导入的模块

常见场景:

解决方法:

# 临时添加模块搜索路径的示例
import sys
import os
# 获取模块所在目录的绝对路径
module_dir = os.path.abspath("path/to/your/module")
# 添加到模块搜索路径
if module_dir not in sys.path:
    sys.path.append(module_dir)
# 现在可以导入模块了
import your_module

6.2 错误2:命名冲突

错误原因:导入的函数/类名和当前文件的同名函数/类冲突,导致覆盖

错误示例:

# 错误示例:命名冲突
from math import sin
# 自己定义的sin函数
def sin(x):
    print("这是我自己的sin函数")
# 调用时,自己的函数覆盖了math的sin函数
sin(math.pi / 2)  # 输出:这是我自己的sin函数

解决方法:

# 正确示例:给导入的函数起别名
from math import sin as math_sin
def sin(x):
    print("这是我自己的sin函数")
# 调用math的sin函数
print(math_sin(math.pi / 2))  # 输出:1.0
# 调用自己的sin函数
sin(0)  # 输出:这是我自己的sin函数

6.3 错误3:循环导入

错误原因:两个模块互相导入对方,导致导入死循环

错误示例:

module_a.py:
# module_a.py
import module_b
def func_a():
    print("这是func_a")
    module_b.func_b()
一键获取完整项目代码
module_b.py:
# module_b.py
import module_a
def func_b():
    print("这是func_b")
    module_a.func_a()

运行任意一个模块都会报错:ImportError: cannot import name '...' from partially initialized module '...'

解决方法:

# 修正后的module_a.py
def func_a():
    print("这是func_a")
    # 延迟导入:在函数内部导入
    import module_b
    module_b.func_b()

6.4 错误4:导入私有成员

错误原因:试图导入模块中以下划线开头的私有成员

说明:Python中以下划线开头的函数/类/变量是私有成员,约定俗成外部不应该直接调用,虽然技术上可以导入,但不推荐

# 不推荐:导入私有成员
from my_calculator import _private_function
_private_function()  # 虽然可以运行,但不符合规范

到此这篇关于零基础学习Python中四大核心导包语法的文章就介绍到这了,更多相关Python导包内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文