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

python基础之--包和模块

python基础之–包和模块

文章目录

  • python基础之--包和模块
  • 一、模块
    • 1.1 基本概念
    • 1.2定义模块
    • 1.3导入模块
    • 1.4内部属性
    • 1.5 常见模块
    • 1.6 第三方模块
    • 1.7自定义模块
    • 1.8总结对比
  • 二、包
    • 1.基本概念
    • 2.导入包和子包
    • 2.3 \_\_init\_\_.py
  • 三,模块与包的区别


一、模块

1.1 基本概念

  • 定义:模块是一个Python文件,每个 . p y .py .py 文件就是一个模块。
  • 作用:用于组织代码,避免代码重复,提高复用性。
  • 使用:通过 i m p o r t import import 语句导入模块中的内容。

1.2定义模块

定义一个model1模块

def runnianjisuan(year):
    if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
        print(year, "是闰年")
    else:
        print(year, "不是闰年")
    return


def add(a, b):
    return a + b

def sub(a, b):
    return a - b


if __name__ == '__main__':
    year = int(input("请输入年份:"))
    runnianjisuan(year)

1.3导入模块

  • 语法
  1. import 模块名  [as 模块新名字1]
    

    导入一个模块到当前程序

  2. from 模块名 import 模块属性名 [as 属性新名]
    

    导入一个模块内部的部分属性到当前程序

  3. from 模块名 import *
    

    导入一个模块内部的全部属性到当前程序

# 模块
# 一个.py文件就是一个模块
# 可以引入模块,使用模块中的函数和变量

import model1

def fn():
   re = model1.runnianjisuan(1978)
   print(re)

fn()
# 模块的导入
# 1. import 模块名
# 2. from 模块名 import 函数名
# 3. from 模块名 import *
# 4. import 模块名 as 别名
# 5. from 模块名 import 函数名as 别名
PS F:\hqyj> & C:/Users/Administrator/anaconda3/python.exe f:/hqyj/14模块和包.py
1978 不是闰年
None

1.4内部属性

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

1.5 常见模块

模块功能官方文档
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
  • 使用实例
    随机数
import random

#随机数
def random_num():
    print(random.randint(1, 100))
    print(random.random())
    print(random.choice([1, 2, 3, 4, 5]))
   

if __name__=="__main__":
     random_num()

import time
59
0.7638132453964123
3

时间

#时间
def time_fn():
    t=time.time()#1970-1-1 08:00:00 到 这个代码运行的时候 过了多少秒
    # print(t)
    # for _ in range(10000):
    #     c=100+200
    # time.sleep(2)#让程序暂停5秒钟
    print(time.time()-t)

    print(time.localtime())
    # 获取年份
    print(time.localtime().tm_year)
    print(time.strftime("%Y年%m-%d %H:%M:%S"))
    print(time.strftime("%H点%M分%S秒"))

if __name__=="__main__":
    time_fn()
time.struct_time(tm_year=2025, tm_mon=3, tm_mday=24, tm_hour=16, tm_min=39, tm_sec=38, tm_wday=0, tm_yday=83, tm_isdst=0)
2025
2025年03-24 16:39:38
16点39分38秒

数学

# math模块 
def math_fn():
    print(math.pi)
    print(math.e)
    print(math.sqrt(2))
    print(math.log(2))
    deg=math.pi/180
    print(math.sin(90*deg))

if __name__=="__main__":
    math_fn()
3.141592653589793
2.718281828459045
1.4142135623730951
0.6931471805599453
1.0

计算机内置操作

def os_fn():
    print(os.name)
    print(os.getcwd())#获取当前目录
    print(os.listdir())#获取当前目录下的所有文件
    print(os.path.exists(""))#判断文件是否存在
    print(os.path.isdir(""))#判断是否是文件夹
    print(os.path.isfile(""))#判断是否是文件
    print(os.path.join("",""))#拼接路径

if __name__=="__main__":
    os_fn()
['00变量3.8.ipynb', '01字符串3.8.ipynb', '02数字3.9.ipynb', '03列表3.10.ipynb', '04元组3.11.ipynb', '05字 典3.11.ipynb', '06集合3.12.ipynb', '07运算.3.13.ipynb', '08语句3.14.ipynb', '09Python函数3.15.ipynb', '10 装饰器.ipynb', '11类和对象3.19.ipynb', '12迭代器和生 成器.ipynb', '13异常处理.ipynb', '14模块和包.py', '15内置模块和包.py', '222.html', 'file.txt', 'lianxi .ipynb', 'model1.py', 'model2.py', '__pycache__', '视频']
False
False

1.6 第三方模块

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

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

使用方法
1.安装模块

pip install numpy

2.使用模块

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

1.7自定义模块

  • 用户自己编写的模块,用于复用代码。
  • 文件名以 . p y .py .py 结尾,存放自定义的函数、类等。
    model1,用于判定是否为闰年和加减法工具,可以直接调用
def runnianjisuan(year):
    if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
        print(year, "是闰年")
    else:
        print(year, "不是闰年")
    return


def add(a, b):
    return a + b

def sub(a, b):
    return a - b


if __name__ == '__main__':
    year = int(input("请输入年份:"))
    runnianjisuan(year)

1.8总结对比

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

二、包

1.基本概念

  • 定义

    • 包是包含多个模块的目录。
    • 包的本质是一个包含 _ _ i n i t _ _ . p y \_\_init\_\_.py __init__.py 文件的文件夹。
    • 文件 _ _ i n i t _ _ . p y \_\_init\_\_.py __init__.py 可为空,也可以包含初始化代码。
  • 作用:用于组织模块的集合,形成层次化的结构,便于管理大型项目。

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

2.导入包和子包

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

2.3 __init__.py

_ _ i n i t _ _ . p y \_\_init\_\_.py __init__.py 用于初始化Python包或模块,作用有:

  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")

三,模块与包的区别

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

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

相关文章:

  • 【简单学习】Prompt Engineering 提示词工程
  • FACTR赋能Franka机器人:触觉-视觉融合决策的颠覆性突破
  • C++实现决策树与随机森林调优困境:从性能瓶颈到高效突破
  • Apollo 相关知识点
  • 浅谈ai工程落地 - 蒸馏 vs 剪枝 vs 量化
  • 客服机器人怎么才能精准的回答用户问题?
  • UML的使用
  • Android Compose 框架组件可见性(Visibility、LocalDensity)深入剖析(十九)
  • 纯文本驱动的数据可视化革命——AI生成图表「图表狐」全场景深度解析
  • SpringCould微服务架构之Docker(1)
  • 处理 macOS 终端打开时会卡在 xcodebuild
  • 105.在 Vue 3 中使用 OpenLayers 加载静态图片作为地图底图
  • 前端知识点---innerHTML和innerText
  • Ubuntu系统使用nmcli配置静态IP
  • 华为OD机试2025A卷 - 构成正方形的数量(Java Python JS C++ C )
  • 【JavaEE】Mybatis XML配置文件实现增删改查
  • 云原生 | 下一代CI/CD工具,Tekton入门部署指南
  • 信号的产生和保存
  • 数据预处理习题
  • Shiro漏洞攻略