python包和模块

大纲

image-20251123191111928

"""
    1 模块
        每一个python文件都是一个一个模块
    2 包
        等价于文件夹(具有一定标识)
        具有__init__.py的文件夹就是包
    3 分类

   - 标准库模块(内置模块): random,math,date,os,
     义模块: 自己写的模块
        - 第三方模块: django,pandas
          的导入
             - 包:
               内部会有一个python文件: __init__.py(初始化加载)
                  - import 
                    import 包名
                    import 包名.模块
                    import 模块
                       - from导入
                         from 包名 import 模块名 [as 别名]
                         用*代替所有的导入内容
                            - 动态导入
                              加载的常见问题
                              """


什么是包

image-20251113194039326

具有__init__.py初始化文件的文件夹就是为包

当把包导入运行后,就会什么pycache缓存文件这是init文件初始化的缓存

什么是模块

模块的就是包中的文件

image-20251113194312397

自定义模块

自定义模块的内容

image-20251114004335699

包与模块导入

测试import包名.模块的导入方式

import test_package         	#直接导入包 会加载init文件,初始化变量
import test_package.Hello   	#包名.模块

res = test_package.Hello.username
print(res)                 		 #测试import 包名.模块,前提要先导入包

测试import 模块的导入方式

import Hello  
res2 = Hello.username

print(res2)                 #测试import 模块,前提是这个模块要跟当前文件

有init文件的文件夹为包,没有的则是普通文件夹里的文件也不能作为模块被导入

image-20251114004718889

import test_package2        #不符合包的概念没有init文件

print(test_package2.Hello.username)

执行后会报以下错误

image-20251110212638717

可以在init文件定义好变量当导入包的时候就会被默认初始化不用再引用模块

image-20251114004833964

import test_package 

print(test_package.USERNAME)

from导入

通过from导入可以给模块起别名

from test_package import Hello as he
print(he.passwd)

动态导入

#2 动态导入
#案例: 导入一个模块,当模块发生变化时
import random
print(random.randint(0,100))        #randint也是前包后不包
import math
print(math.pi)

#动态导入1,动态导入将模块名作为变量导入--不推荐
module = ["random","math"]
random1 = __import__(module[0])
print(random1.randint(0,100))
math1 = __import__(module[1])
print(math1.pi)

#动态导入2,
import importlib
math2 = importlib.import_module(module[1])
print(math2.pi)

#3 导入模块的内存问题
import math as m1
import math as m2
import math as m3
print(id(m1))
print(id(m2))
#结果:同一个模块,无论导入多少次别名为什么都是指向同一个内存地址

[!NOTE]

两种动态导入的区别

  • __import__ 是 Python 内置函数,语法相对底层
  • importlib.import_module 是更推荐的方式(属于标准库),语法更清晰,功能更完善,尤其在处理复杂导入场景(如包内模块)时更可靠

内置模块

math

方法说明
ceil(天花板的意思)向上取整
floor向下取整
e属性 自然常数
fabs求绝对值等价于全局函数abs()
fmod求模
isnan判断是不是一个数字
isfinite判断是不是无限
pi圆周率
pow()幂次方
sqrt根号 开平方根

查看math用法

import math		#先导入函数
#查看math内部函数的用法
#print(help(math))
print(dir(math))

ceil

#1 ceil 向上取整
print(f"ceil:",math.ceil(3.4))	#4

floor

#2 floor 向下取整
print(f"floor:",math.floor(3.4))	#3

e

#3 e 自然常数
print(f"自然常数:",math.e)

fabs

#4 fabs |-5| = 5    取绝对值
print(f"fabs:",math.fabs(-9))
#也可使用内置函数 abs()
print(f"abs:",abs(-9))

pi

print(f"pi: ",math.pi)

fmod

#6 fmod 求模 <==> 取余
print(f"fmod:",math.fmod(5,3))      #5 % 3 = 2

isnan

#7 isnan  判断是否为不是数字,返回布尔值
print(f"判断是否为数字:",math.isnan(float('fjw')))

isfinite

#8 isfinite 判断数是否为无穷大或无穷小
print(f"isfinite:",math.isfinite(1/3))

pow

#9 pow() 计算次方
print(f"pow:",math.pow(10,2))

sqrt

#10 sqrt() 开根号
print(f"sqrt:",math.sqrt(25))

Random

方法说明
randint()产生随机整数[m,n]
random()产生一个0~1内的随机数[0,1) random.random()可以乘10取整得到0-9的整数
uniform()产生基于正态分布的随机数(一般用不到)
range()产生一个范围的随机数
choice在序列(有序的,set是无序的)中随机筛选一个元素

randint,random

import random as rd	

#random 表示产生0-1之间随机数字
print(rd.random())

#randint产生范围内的随机整数
print(rd.randint(10,50))

#产生0-100之间的随机整数
print(int(rd.random() * 100))

choice

list2 = ["python","c","java","c++","go"]
print(rd.choice(list2))

案例

#案例: 使用range()产生0-100之间的随机列表,长度为10
list3 = []
for i in range(10):
    list3.append(rd.randint(0,100))
print(list3)

list4 = [rd.randint(0,100) for _ in range(10)]
print(list4)

#choices
new_list = rd.choices(range(0,101),k=10)	#k=10 抽取10个元素
print(new_list)

OS

OS中译过来为操作系统

方法说明
curdir获取当前目录标识,返回的是相对路径(绝对路径os.path.abspath(os.curdir))
chmod()修改权限 主要用在linux,help(os.chmod)
close关闭文件路径
cpu_count()返回cpu的核心线程数
getcwd()获取当前路径,返回的是绝对路径,相当于linux的pwd
getpid()获取当前线程的进程编号(任务管理器—详细信息)
getppid()获取当前进程的父进程的进程编号
kill()通过进程号杀死进程
linesep对应系统下的换行符
listdir()返回对应目录下的所有文件及文件夹(隐藏文件也可以调取出来),返回的是列表
makedirs()创建目录,支持创建多层目录
mkdir创建目录,只支持一层创建,不能创建多层
open创建文件,等价于全局函数open(IO流详细讲)
pathsep获取环境变量的分割符 windows ; linux :
sep路径的分割符 windows \ linux /
remove(文件名或者路径)删除文件
removedirs移除目录,支持多级删除,递归删除
system执行终端命令

以下为OS模块部分方法的示例

import os 

curdir

#1 获取当前目录标识
print(os.curdir)    #. 代表当前目录

cpu_count()

#2 获取cpu的线程数
print(os.cpu_count())	

getcwd

#3 获取当前目录的路径
print(os.getcwd())

getpid

#4 获取当前进程pid
print(os.getpid())

getppid

#5 获取当前父进程pid
print(os.getppid())

kill

#6 kill
#print(os.kill(进程号))

listdir

#7 返回对应目录下的所有文件及文件夹
print(os.listdir("E:\\"))

makedirs

#8 创建多层目录
print(os.makedirs("D:\\a\\b\\c"))

mkdir

#9 创建一层目录
print(os.mkdir("D:\\aaa"))

pathsep

#10 获取环境变量的分隔符
print(os.pathsep)       #windows下的是;,linux下是:

sep

#11 路径的分割符
print(os.sep)			#windows下的是\,linux下是/

removedirs

#12 移除目录,支持多级删除
print(os.removedirs("D:\\a\\b\\c"))

system

#13 执行终端命令
#os.system("cls")

os.path

image-20251123192216489

"""
    os.path(重点)
        1 路径问题:
            路径: 文件在磁盘中的位置
            相对路径: 相对当前文件夹的
            绝对路径: 从盘符(CDEF)开始
        2 路径分割符问题:
            \\ 在python中使用路径时,需
            / 反斜杠
        3 面试题: \\ / 之间的区别
            / linux系统使用的,windows
            \\ windows系统使用的,在代
"""
import os.path as path

#查看函数用法
#print(help(path))
#print(dir(path))

#1 获取当前路径 abspath 相对路径返回绝
print(path.abspath("."))
print(path.abspath(".."))       #当前

#2 获取python解释器路径默认分割符
print(path.altsep)  


#3 获取某目录某文件/文件夹的名称
file_path = "E:\\A云计算\\20251013pyth
file_path_dir = "E:\\A云计算\\20251013
print(path.basename(file_path))
print(path.basename(file_path_dir))

#4 获取文件所在的目录
print(path.dirname("./test_module/Test
print(path.dirname("./test_module"))

#5 判断文件/文件夹是否存在
print(path.exists(file_path))
print(path.exists(file_path_dir))

#6 获取文件大小
print(path.getsize(file_path))      #1
print(path.getsize(file_path_dir))  #4
#print(path.getsize("D:/a.txt"))     #

#7 路径拼接
parent_path = "E:/A云计算/20251013pyth
child_path = "09_package/test_module/T
print(path.join(parent_path,child_path

#8 判断是否是文件
print(path.isfile(path.join(parent_pat



"""
作业: 使用os和os.path以及函数的递归完
给出一个路径,遍历当前路径所有的文件及
打印输出所有的文件(遇到文件输出路径,
"""
import os 
def for_file(path1):
    for file in os.listdir(path1):
        path2 = path.join(path1,file)

        if path.isfile(path2):
            print(f"文件名: ",{path2})
        elif path.isdir(path2):
            for_file(path2)

for_file(file_path_dir)        

sys

image-20251123192124213

import sys
#1 获取python内部版本号
print(sys.api_version)
#2 获取cpython的版本
print(sys.copyright)

#3 获取默认的编码
print(sys.getdefaultencoding())         #utf-8
print(sys.getfilesystemencoding())      

#4 获取递归的最大限制层数
print(sys.getrecursionlimit())      #1000

#5 返回窗口的版本信息
print(sys.getwindowsversion())
print(sys.version)

UUID

uuid模块 --获取一个永不重复的序列

import uuid
#产生一个序列       --永不重复
print(uuid.uuid4())
print(uuid.uuid4().hex)

时间模块

时间模块有time,calendar,datetime

"""
    1 时间模块:
        操作时间本身        time
        操作时间分量计算     calendar
    2 时间子模块:
        主要设置时间        datetime

"""

这里主要提及time模块

image-20251123192047088

import time
#1 获取当前时间
print(time.asctime())
print(time.ctime())

#2 时间的产生-- 时间戳
"""
    1970年1月1日 00:00:00
"""
print(time.time())

#3 localtime()
print(time.localtime())

#4 格式化时间
print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()))
print(time.strftime("%Y-%m-%d"))
print(time.strftime("%H:%M:%S"))

#5 解析时间
date_str = "2025-1-8"
print(time.strptime(date_str,"%Y-%m-%d"))

#6 sleep()
#案例: 计算当前程序运行的时间
start_time = time.time()
#模拟程序5s
time.sleep(5)
end_time = time.time()
print("程序运行的时间: ",end_time - start_time)

import datetime as dt
#设置时间
print(dt.date(2000,1,8))                #设置日期
print(dt.time(20,10,8,213))             #设置时间
print(dt.datetime(2000,1,8,20,10,8))    #设置日期与时间  

加密模块

"""
    加密模块
        加密"zhangsan 123" --加密(算法) --- "sdadsdawdad"
        https://www.baidu.com
        - 对称加密
            对称加密: --加密和解密用的是同一个密钥
            非对称加密 --加密和解密使用不同密钥(公钥,私钥)
        - 可逆加密(可以解密)和不可逆加密(不可以通过密钥解密)
            MD5

        hashlib
        hmac
"""

以下示例可以看出hashlib与hmac的区别

import hashlib

username = 'zhangsan'
password = "123"

#加密
username_md5 = hashlib.md5(username.encode("utf-8"))
password  = hashlib.md5(password.encode("utf-8"))
print(username_md5.hexdigest())

#加盐
"""
    盐值 加密的时候加盐值(一段字符串)
"""
slat = "$$%%@@"
username_md5.update(slat.encode("utf-8"))
print(username_md5.hexdigest())
import hmac
res1 = hmac.new(username.encode("utf-8"),slat.encode("utf-8"),"md5").hexdigest()
res2 = hmac.new("123".encode("utf-8"),slat.encode("utf-8"),"md5").hexdigest()
print(res1)
print(res2)

[!NOTE]

hmac可以做到一步完成

案例: 使用加密完成登录验证

#数据库存储的是加密后的用户名和密码
import hashlib
#1 定义函数对传入的字符串进行加密
def encryption(str):
    slat = "@@##!!"
    res = hashlib.md5(str.encode("utf-8"))
    res.update(slat.encode("utf-8"))
    return res.hexdigest()

#定义数据库的用户名和密码
username_mysql = encryption("zhangsan")
password_mysql = encryption("123")
print(username_mysql)

#模拟登录的过程
username = input("username: ")
password = input("password: ")

def login(username,password):
    return True if encryption(username) == username_mysql and encryption(password) == password_mysql else False

print("登录成功" if login(username,password) else "登录失败")

第三方模块

第三方模块安装

  • pip是Python的包管理工具,它用于安装、升级和管理Python包。
  • 在Python官方网站上下载并安装Python,pip会随之安装。

查看pip版本

image-20251123193216593

安装模块

pip install requests

e9991f7455a588060bb6d028ecf240dc

升级安装的模块

pip install --upgrade package_name

列出已安装的包

pip list

image-20251123193402187

卸载已安装的包

pip uninstall package_name

常见的第三方模块

常见的第三方模块有很多,以下是其中一些常用的模块及其功能介绍:

requests:用于发送HTTP请求,可以方便地进行网络通信和数据交互。
numpy:提供了高性能的多维数组对象和相关工具,用于进行数值计算和科学计算。
pandas:提供了高效的数据结构和数据分析工具,用于处理和分析大型数据集。
matplotlib:用于绘制各种类型的图表和可视化,支持折线图、散点图、柱状图等多
种图形。
scikit-learn:提供了丰富的机器学习算法和工具,用于数据挖掘和数据分析。
tensorflow:一个开源的机器学习框架,用于构建和训练各种类型的神经网络模型。
flask:一个轻量级的Web框架,用于快速构建Web应用程序。
django:一个功能强大的Web框架,提供了完整的MVC架构和丰富的功能组件。
scrapy:一个用于爬取网站数据的框架,支持高效的异步网络请求和数据解析。
pytorch:一个深度学习框架,提供了动态计算图和丰富的神经网络模型。

这些第三方模块可以大大提高开发效率,同时也提供了丰富的功能和工具,满足了不
同领域的需求。
本文章为学习后的产出笔记与实验记录,谢谢阅读,如有问题及时提出~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值