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

python包和模块

1、模块

模块

#模块是Python代码文件,包含Python定义和语句。模块可以被导入到另一个模块中,以便在当前模块中使用定义和语句。模块可以包含函数、类、变量和常量。

#模块的命名规则:模块名必须是文件名(不包含扩展名)或包名(包含一个或多个点)的有效标识符。

.py文件就是模块,模块名就是文件名。

1.1导入模块

建一个mk.py的python文件(定义模块mk):

def add(x, y):
    return x + y
def my(x, y):
    return x * y

建一个ch1.py的python文件(导入模块):

  • from 模块名 import *    导入一个模块到当前程序
  • import  模块名              导入一个模块内部的全部属性到当前程序
import mk  #导入mk模块

a =mk.add(1, 2)  #调用mk模块中的add函数
print(a)  #3

b =mk.my(3, 4)  #调用mk模块中的my函数
print(b) #12

 只导入模块里的某个函数或变量:

from 模块1 import 变量1,变量2,变量3

导入用不到的函数或变量会占用内存,浪费内存。

from mk import add  #导入mk模块里的add函数或变量

a =add(1, 2)  #调用mk模块中的add函数,不用写成mk.add(1,2)
print(a) #3

y = my(5.6)     #报错,因为没有导入my函数
print(y)

1.2内部属性

 __file__  绑定模块的路径
 __name__  绑定模块的名称
        如果是主模块(首先启动的模块)则绑定 '__main__'
        如果不是主模块则 绑定 xxx.py 中的 xxx 这个模块名

1.3模块分类

Python 的模块可以分为系统模块、自定义模块和第三方模块

1.3.1 系统模块

Pytho内置的模块,安装Python时已包含,提供基础功能,比如数学运算、文件操作、网络通信等。

特点

  • 即用即导入:直接import即可使用。

  • 性能高效:通常使用 C 语言实现。

1.3.1.1 常见模块
模块功能官方文档
math数学运算https://docs.python.org/zh-cn/3.12/library/math.html
os操作系统接口https://docs.python.org/zh-cn/3.13/library/os.html
os.path路径相关https://docs.python.org/zh-cn/3.13/library/os.path.html
datetime日期和时间https://docs.python.org/zh-cn/3.13/library/datetime.html
random随机数生成https://docs.python.org/zh-cn/3.13/library/random.html
time时间https://docs.python.org/zh-cn/3.13/library/time.html

1.3.1.2 方法示例
import random

a = random.randint(1, 100)  #调用random模块中的randint函数
print(a)

random.random()   # random.random  生成包含0 但不包含1 的浮点数
random.choice("ABCD")    # 从一个序列中,随机返回一个元素
random.choice("ABCD")
L = [1, 2, 3, 6, 9]
random.choice(L)
random.shuffle(L)   # random.shuffer(x)  # 把列表X 打乱
print(L)

import time

time.time()  # 返回当前时间的时间戳
time.ctime()  #返回当前的UTC 时间的字符串
t1 = time.localtime()  # 返回当前的本地时间元组
time.sleep(3)  # 让程序睡眠 n 秒
time.strftime("%Y-%m-%d", t1)  # 格式化时间
time.strftime("%y-%m-%d", t1)
time.strftime('%Y-%m-%d %H:%M:%S', t1)

# 1. os.getcwd(): 获取当前工作目录
import os
current_directory = os.getcwd()
print("当前工作目录:", current_directory)

# 2. os.chdir(path): 改变当前工作目录
new_directory = "F:\\01.AI07.深度学习框架\\00.上课课件"
os.chdir(new_directory)
print("工作目录已更改为:", os.getcwd())

# 3. os.listdir(path='.'): 返回指定目录下的所有文件和目录列表
directory_path = "."
files_and_dirs = os.listdir(directory_path)
print("指定目录下的文件和目录列表:", files_and_dirs)

# 4. os.mkdir(path): 创建目录
new_directory = "new_folder"
os.mkdir(new_directory)
print(f"目录 '{new_directory}' 已创建")

# 5. os.rmdir(path): 删除目录
directory_to_remove = "new_folder"
os.rmdir(directory_to_remove)
print(f"目录 '{directory_to_remove}' 已删除")

# 6. os.remove(path): 删除文件
file_to_remove = "example.txt"
os.remove(file_to_remove)
print(f"文件 '{file_to_remove}' 已删除")

1.3.2 自定义模块

  • 用户自己编写的模块,用于复用代码。

  • 文件名以 .py 结尾,存放自定义的函数、类等。

建一个mk.py的python文件(定义模块mk):

def add(x, y):
    return x + y
def my(x, y):
    return x * y

建一个ch1.py的python文件(导入模块):

  • from 模块名 import *    导入一个模块到当前程序
  • import  模块名              导入一个模块内部的全部属性到当前程序
import mk  #导入mk模块

a =mk.add(1, 2)  #调用mk模块中的add函数
print(a)  #3

b =mk.my(3, 4)  #调用mk模块中的my函数
print(b) #12
跨文件夹使用

假设目录结构如下:

project/
    utils/
        __init__.py
        math_utils.py
    main.py

main.py中:     

from utils.math_utils import add

 

1.3.3 第三方模块

由社区或公司开发,通过包管理工具(如pip )安装,用于实现更高级或更具体的功能,如数据科学、图像处理、网络爬虫等。

1.3.3.1 常见模块

那这可就太多了~这里随便举的例子

模块功能示例
numpy数值计算科学运算、矩阵操作
pandas数据分析数据清洗与处理
matplotlib数据可视化绘制图表
requestsHTTP请求处理爬取网页内容,调用API
flaskWeb应用框架快速搭建Web服务
1.3.3.2 使用示例

1.安装模块:pip install numpy pandas requests

numpy=1.25.0  :指定模块numpy版本是1.25.0版,没有就默认最新版

2.使用

# numpy 模块
import numpy as np
array = np.array([1, 2, 3])
print(array.mean())  # 输出: 平均值 2.0

# pandas 模块
import pandas as pd
df = pd.DataFrame({"Name": ["Alice", "Bob"], "Age": [25, 30]})
print(df)

# requests 模块
import requests
response = requests.get("https://jsonplaceholder.typicode.com/posts/1")
print(response.json())

 

1.3.3总结对比

分类获取方式使用场景示例
系统模块随Python自带常用功能,性能高效math, os, random
第三方模块pip 安装高级功能,特定领域numpy, requests
自定义模块自己编写项目特定需求,灵活控制utils.py

2、包

2.1概念

包是包含多个模块的目录。包可以包含模块、子包、子目录等。

包就是包含多个模块的文件夹。

包的目录结构:

包的目录结构必须包含一个__init__.py文件,该文件可以为空。

包的目录结构可以包含模块、子包、子目录等。

my_package/
    __init__.py
    module1.py
    module2.py
    subpackage/
        __init__.py
        module3.py

包的命名规则:包名必须是文件名(不包含扩展名)或包名(包含一个或多个点)的有效标识符。

包的作用:

1. 包可以避免命名冲突。

2. 包可以隐藏模块内部的复杂实现。

3. 包可以提供一个接口,使得模块可以被其他程序使用。

2.2导入包

使用`import`关键字可以导入包和子包,以访问其中的模块和内容。

    # 同模块的导入规则
    import 包名 [as 包别名]
    import  包名.模块名 [as 模块新名]
    import  包名.子包名.模块名 [as 模块新名]
    
    from 包名 import 模块名 [as 模块新名]
    from 包名.子包名 import 模块名 [as 模块新名]
    from 包名.子包名.模块名 import 属性名 [as 属性新名]
    
    # 导入包内的所有子包和模块
    from 包名 import *
    from 包名.模块名 import *

2.3__init__.py

在Python中,__init__.py文件用于将一个目录标识为Python包。即使目录为空,只要其中包含__init__.py文件,Python就会认为这个目录是一个包。这个文件可以为空,但通常会包含包的初始化代码,比如导入模块或者设置包的变量。通过__init__.py,可以控制包的导入行为,比如初始化时执行某些操作或者定义包的公共接口。

作用

  1. 标识包目录: 告诉Python解释器当前目录应被视为一个包。

  2. 执行初始化代码: 可以包含任何代码,通常用于包的初始化操作,如变量初始化、导入模块等。这些代码在包被导入时执行。

  3. 控制包的导入行为: 通过 __all__ 变量明确指定从包中可以导入哪些模块,从而限制包的公开接口。

  4. 提供包级别的命名空间: __init__.py 中定义的变量和函数可以在包的模块中共享。

  5. 批量导入模块: 可以在 __init__.py 文件中批量导入模块,这些模块可以更方便地使用。

# __init__.py 文件示例

# 1. 批量导入系统模块
import os
import sys
import datetime

# 2. 定义包级别的变量
package_variable = "This is a package variable"

# 3. 控制包的导入行为
__all__ = ['module1', 'module2']

# 4. 执行初始化代码
print("Initializing mypackage")

# 注意:这个代码会在包被导入时执行

# 5. 导入包内的模块
from . import module1
from . import module2

3、模块与包的区别

模块
一个Python文件一个包含__init__.py的文件夹
提供基本功能单元用于组织多个模块
文件名为.py目录名


http://www.kler.cn/a/597795.html

相关文章:

  • 深入理解指针(1)(C语言版)
  • 计算机操作系统(六) 进程控制与进程通信 (附带图谱更好对比理解)
  • 指针,数组 易混题解析(一)
  • 在 .NET 9.0 Web API 中实现 Scalar 接口文档及JWT集成
  • JavaEE-MyBatis概述第一个程序
  • 生活电子常识-deepseek-r1本地化部署+ui界面搭建
  • 练习:自动驾驶
  • xy轴不等比缩放问题——AUTOCAD c#二次开发
  • 【leetcode题解】宽搜(BFS)
  • AI 驱动视频处理与智算革新:蓝耘MaaS释放海螺AI视频生产力
  • HTTP/HTTPS 中 GET 请求和 POST 请求的区别与联系
  • Python基于深度学习的中文情感分析系统(V2.0,附源码,文档说明)
  • 汽车制造MES
  • langfuse追踪Trace
  • pyecharts在jupyter notebook中不能够渲染图表问题。
  • Second-Me: 训练你的 AI 自我以连接世界
  • android音频概念解析
  • 2025年2月-3月后端go开发找工作感悟
  • YOLO11改进|全网首发|YOLO11中引入轻量级坐标注意力LCA
  • Aider的Repo Map功能