Python入门Day10:模块(module)与包(package)

学习目标:

  • 理解什么是模块(module)和包(package)
  • 掌握模块的导入方式、使用方法
  • 理解 name == "main"的作用
  • 学会创建自己的模块和包,提升代码组织能力
  • 使用Python常用内置模块,如math、random、sys

一、模块(Module)基础

1.什么是模块

Python中每一个.py文件就是一个模块(module),模块是组织代码的基本单位,本质是"一个可以导入的Python文件 "

模块就是帮助我们组织功能代码,实现代码复用的工具。

2.自定义模块创建与使用

文件结构:

css 复制代码
project/
├── main.py
└── tools.py

tools.py

python 复制代码
# tools.py
def add(x,y):
    return x + y

def square(n):
    return n * n

main.py

python 复制代码
# main.py

import tools  # 导入自定义模块

print(tools.add(2, 3))       # 调用 add 函数
print(tools.square(4))       # 调用 square 函数

3.模块的四种导入方式

python 复制代码
import math                     # 导入整个模块(推荐)

import math as m               # 起别名(常用于 numpy → np)

from math import sqrt          # 只导入指定函数

from math import *             # 导入全部(不推荐,可能命名冲突)

4.模块的搜索路径:sys.path

python 复制代码
import sys
print(sys.path)         #查看模块查找路径

解释器会按顺序查找:

  • 1.当前目录
  • 2.环境变量 PYTHONPATH
  • 3.标准库路径
  • 4.site_packages(第三方库)

二、模块执行入口判断: name == "main"

这是判断模块是否被"直接执行"还是被"导入使用"的常用方式

python 复制代码
# module_test.py

def say_hi():
    print("你好!")

if __name__ == "__main__":
    print("我是主程序运行的")
    say_hi()
else:
    print("我是被import的,不会运行上面代码")

运行:

python 复制代码
python module_test.py       # 会执行 if 语句
import module_test          # 不会执行 if 语句

实际用途:

  • 模块中包含测试代码时,避免import时误执行
  • 模块既能运行又能import

三、包(Package)详解

1.什么是包?

包是一个包含多个模块的目录(文件夹),其中一个包含__init__.py文件(可选,用于标识为包)。

目录结构示例:

bash 复制代码
project/
├── main.py
└── utils/
    ├── __init__.py         # 必须存在(可空)
    ├── math_tool.py
    └── string_tool.py

utils/math_tool.py

python 复制代码
def square(x):
    return x * x

main.py

python 复制代码
from utils.math_tool import square
print(square(5))        #输出:25

2.init.py的作用

  • 用来标记该目录为Python包
  • 可以执行初始化逻辑或暴露公共接口

utils/init.py

python 复制代码
print("包 utils 被导入了")

3.相对导入 vs 绝对导入

python 复制代码
from . import math_tool                #当前包内相对导入
from utils.math_tool import square     #绝对导入

推荐绝对导入,避免跨包路径混乱。

四、常见内置模块介绍与实用技巧

1.math(数学库)

python 复制代码
import math

print(math.sqrt(16))        #平方根
print(math.pow(2,3))        #2的3次幂
print((math.floor(3.7))     #向下取整
print((math.pi))            #取pi值

2.random(随机数生成)

python 复制代码
import random

print(random.randint(1,6))               #模拟掷骰子
print(random.choice(["a","b","c"]))      #随机选取
print(random.shffle([1,2,3]))            #打乱列表(原地操作)

3.os(文件/目录操作)

python 复制代码
import os

print(os.getcwd())            #获取当前工作目录
print(os.listdir("."))        #列出当前目录文件
# os.mkdir("test_dir")        #创建新文件夹

4.sys(解释器交互)

python 复制代码
import sys

print(sys.argv)        #命令行参数(列表)
print(sys.path)        #模块搜索路径
相关推荐
wyiyiyi22 分钟前
【Web后端】Django、flask及其场景——以构建系统原型为例
前端·数据库·后端·python·django·flask
mit6.82437 分钟前
[1Prompt1Story] 滑动窗口机制 | 图像生成管线 | VAE变分自编码器 | UNet去噪神经网络
人工智能·python
没有bug.的程序员42 分钟前
JVM 总览与运行原理:深入Java虚拟机的核心引擎
java·jvm·python·虚拟机
甄超锋1 小时前
Java ArrayList的介绍及用法
java·windows·spring boot·python·spring·spring cloud·tomcat
cui__OaO1 小时前
Linux软件编程--线程
linux·开发语言·线程·互斥锁·死锁·信号量·嵌入式学习
鱼鱼说测试2 小时前
Jenkins+Python自动化持续集成详细教程
开发语言·servlet·php
AntBlack2 小时前
不当韭菜V1.1 :增强能力 ,辅助构建自己的交易规则
后端·python·pyqt
艾莉丝努力练剑2 小时前
【洛谷刷题】用C语言和C++做一些入门题,练习洛谷IDE模式:分支机构(一)
c语言·开发语言·数据结构·c++·学习·算法
CHEN5_023 小时前
【Java基础面试题】Java基础概念
java·开发语言
杜子不疼.4 小时前
《Python学习之字典(一):基础操作与核心用法》
开发语言·python·学习