Python模块
Python基础 之 模块
前置技术点:函数
模块概述
一个模块其实就是一个.py
文件,同时大部分模块命名规范都是小写的,如time
模块,os
模块,pygame
模块等
模块可分为三类:
-
内置模块:python官方收录的,不用下载的自带模块
-
第三方模块: python官方未收录的,要下载才能用的模块,如pygame, flask, django等
-
自定义模块:自已项目中写的 main.py
模块导入
1 什么时候要导入?
在我们自己的python程序中,要使用模块(也就是另一个.py
文件),是要先做导入操作的。
如:在 main.py 中要使用到 abc.py 中的函数,由于跨文件了,这时我们就要做导入操作。
2 如何导入?
方式一:
import
文件名称 (注意,只是文件名称,没有.py),在导入之后,就可以用这个 文件名称.方法()
import random # (注意,只是文件名称,没有.py) print( random.randint(1,100) )
还可给导入的模块取别名
import
文件名称 as
别名, ,在导入之后,就可以用这个 别名.方法()
import random as r print( r.randint(1,100) )
方式二:
from
模块名称 import
类/变量/方法 ,在导入之后,就可以直接使用这个 类/变量/方法
from random import randint print( randint(1,100) )
from
模块名称 import
类/变量/方法 as
别名,就可以使用 别名来使用这个 类/变量/方法
from random import randint as ri print( ri(1,100) )
3 练习案例
请在main.py
中导入main2, 之后使用main2.py
中的变量和函数。
main2.py
内的代码如下:
name = "张三丰" def fun1(): print("我是main2中的fun1...") def fun2(): print("我是main2中的fun2...") def fun3(): print("我是main2中的fun3...")
main.py
的代码如下:
# 方式一:import xxx import main2 print(main2.name) main2.fun1() main2.fun2() main2.fun3()
# 方式二:from xxx import xxx from main2 import * print(name) fun1() fun2() fun3()
4 __all__
和 __name__
关于__all__ = []
from 模块名 import *
# 从模块 导入所有
关于__all__ = [“类1”,“类2”]
from 模块名 import *
# 从模块导入所有,这个所有指的是__all__
中包含的
关于if __name__ = ‘__main__’: pass
在模块中,添加此属性,一般用来做测试代码,表示当前在独立运行此模块才调用
test.py
def fu1(): print("我是test这个模块的fun1 函数") def fu2(): print("我是test这个模块的fun2 函数") fu1(); if __name__ == '__main__': fu2();
在独立运行test时,fun1函数、fun2函数会运行;
在其他模块中导入test时,fun1函数会运行,fun2函数不会直接运行;
5 关于包
当要分类管理不同的模块时,就可以用包来管理了,包“可以理解为”就是文件夹,当然做法上有点小区别
包有一个__init__.py
的文件(其实就是个空文件,只是为了让python知道,它到底是文件夹还是包)
一般,在一个大一点的项目中,会用模块和包来组织所有代码文件,包就有效的解决了,模块重名的问题
包1 模块1.py 模块2.py __init__.py 包2 模块1.py __init__.py main.py
包下模块导入操作:
import 包1.模块2 # 导入模块 包1.模块2.gogogo() # 调用模块内函数 from 包1 import 模块2 # 导入模块 模块2.gogogo() # 调用模块内函数
内置模块
python官方收录的,不用下载, 导入后就可使用的自带模块
1 os模块
os.mkdir() & os.rename() & os.rmdir() & os.remove()
mkdir创建文件夹
rmdir删除文件夹
rename重命名文件/文件夹
remove删除文件
import os # 创建nf1 nf2 nf3 nf4四个文件夹 os.mkdir("nf1") os.mkdir("nf2") os.mkdir("nf3") os.mkdir("nf4") # 删除nf3文件夹 os.rmdir("nf3") # 重命名 os.rename("nf4","renamenf4")
print( os.getcwd() ); # 获取当前工作路径 print( os.path.exists("test.txt") );# 文件是否存在
os.system()
执行系统命令
import os # notepad:记事本 # cmd:命令提示符 # calc:计算器 # mspaint:画图 # taskmgr:任务管理器 # msconfig:系统配置工具 # servicesmsc:服务管理工具 # regedit:注册表 # mstsc:运程管理 os.system("calc")
2 calendar模块
import calendar # 生成日历 print(calendar.calendar(2023)) print(calendar.month(2022, 3))
3 time模块
import time print( time.time()); # 返回从1970年1月1日0时0分0秒到现在经过的时间 print( time.localtime() ); # 获取本地时间,得到的是一个元组 print( time.localtime().tm_year ); # 年 print( time.localtime().tm_mon ); # 月 print( time.localtime().tm_mday ); # 日 print(time.strftime('%Y/%m/%d %H:%M:%S')) # 2023/02/28 22:11:25
4 练习案例
练习:设计一个函数,根据你的出生年份(参数),计算返回你的年龄
提示:用time模块来得到当前年份,再与你的出生年份做计算,返回结果
import time # 函数定义 def getAge(myYear): # 现在的年份 cy = time.localtime().tm_year # 现在的年份 - 出生年份 age = cy - myYear # 返回结果 return age; # 函数调用 age = getAge(1998) print( age )
5 math模块
数学模块
from math import * print(pi) # 圆周率 print(e) # 自然常数 print(ceil(85.123)) # 向上取整 print(ceil(85.987)) print(floor(75.352)) # 向下取整 print(floor(75.959)) print(pow(7,3)) # 7的3次方 print(sqrt(2)) # 开平方根 print(sin(45)) # 正弦 print(cos(45)) # 余弦 print(tan(45)) # 正切 print(fabs(-1423.324)) # 绝对值 print(radians(50)) # 求弧度 print(fsum(range(1,101))) # 求和 print(log(16384,2)) # 以2为底的16384的对数 print(log2(65536)) # 以2为底的65536的对数 print(log10(100000000000)) # 以10为底的100000000000的对数 print(factorial(15)) # 阶乘:15!
6 练习案例
练习: 设计一个函数,计算两点间的距离,完成测试调用
两点的坐标是(x1,y1)和(x2,y2),则两点之间的距离公式为 d = 根号[(x1-x2)2+(y1-y2)2]。
print( math.pow(4,2) ) # 4的2次方 16 print( math.sqrt(9) ) # 9的平方根 3
参考代码如下:
import math # 分别用x1,y1,x2,y2表示两点 x1 = 5; y1 = 15; x2 = 5; y2 = 3; # x1-x2的平方 a = math.pow(x1 - x2, 2); # y1-y2的平方 b = math.pow(y1 - y2, 2); # 平方根 d = math.sqrt(a+b); # 输出结果 print(d)
7 random模块
import random print( random.random()) #大于0小于1之间的小数 print( random.randint(80,100) ); # 获取一个随机整数,范围80-100 print( random.choice(['一等奖','二等奖','三等奖','欢迎再来'])) # 随机抽取一个样本
8 扩展练习案例
随机生成四位验证码
提示代码1: 关于随机数字
import random random.randint(65, 65+25) # 生成出来的是数字 random.choice(["A","a","6"])# 随机选择一个
提示代码2: 关于Unicode编码
ord() # 返回字符对应的Unicode编码(如:A是65, a是97) chr() # 与ord()相反 # A --> 65 a -->97 0 --> 48
步骤1 随机生成大写 or 小写 or 数字:
import random t1 = random.randint(65, 65+25) # 65 - 90之间的随机数 (65 -->A , 90 -->Z) t2 = random.randint(97, 97+25) t3 = random.randint(48, 48+8) t1 = chr(t1); t2 = chr(t2); t3 = chr(t3); print(t1) print(t2) print(t3)
步骤2 随机生成一位验证码(大写 or 小写 or 数字,三选一), 执行四次生成四个
import random for i in range(4): t1 = chr(random.randint(65, 65+25)); t2 = chr(random.randint(97, 97+25)); t3 = chr(random.randint(48, 48+8)); # 从大写字母,小写字母,数字中随机三选一 t = random.choice([t1,t2,t3]); print(t) # 现在仅仅是打印出来的
步骤3 将四个验证码数据连接成一个完整字符串
import random code = '' # 定义一个用来保存完整验证码的字符串 for i in range(4): t1 = chr(random.randint(65, 65+25)); t2 = chr(random.randint(97, 97+25)); t3 = chr(random.randint(48, 48+8)); # 从大写字母,小写字母,数字中随机三选一 t = random.choice([t1,t2,t3]); # 验证码(字符串)连接 code = code+t; print(f"验证码:{code}");
步骤4 重构代码, 整理为一个生成四位验证码的函数
以下代码在重构过程中, 将变量名称也标准化了, 不再是使用的t1,t2,t3,t这种随意的变量名称
import random # 生成验证码: # 1 每一位都可以是大写字母 小写字母 数字 # 2 要求共4位 def get_code(): # 用来保存生成的验证码 code = ""; for i in range(4): r1 = chr(random.random(48, 48+8)); r2 = chr(random.random(97, 97+25)); r3 = chr(random.random(65, 65+25)); rand = random.choice( [r1,r2,r3] ); code = code+rand; # 将此验证码返回 return code; # 生成验证码,函数调用 result = get_code() print( result )
9 turtle模块
turtle(海龟)是python中比较好玩一个模块,它有一个专有名称“海龟作图”,它可以通过某些语句来控制一个点在白板上的运动轨迹,它在白板上走过的地方会留下痕迹,就像一支笔在纸上写字画画一样,属于入门级的图形绘制函数库;
此模块被python官方收录了,可直接导入使用,无需安装,所以也可以认为是一个内置模块了
import turtle # 导入模块
turtle的使用主要分为以下三个方面:创建窗口,设置画笔,绘制图形
设置窗口
使用setup()函数创建图形窗口。
turtle.setup(width, height, startx=None, starty=None) # width: 窗口宽度 # height: 窗口高度 # startx:窗口在计算机屏幕上的横坐标(当取值为None时,窗口位于屏幕中心) # starty:窗口在计算机屏幕上的纵坐标(当取值为None时,窗口位于屏幕中心) t.done() # 保持程序不关
turtle的空间坐标体系:
设置画笔
import turtle # 导入模块 turtle.penup() #表示抬起画笔;可以简写成turtle.pu() turtle.pendown() #表示画笔落下;可以简写成turtle.pd()
绘制图形
在画笔状态为DOWN时,通过移动画笔可以在画布上绘制图形,可以将画笔想象成一只海龟(这也是turtle模块名字的由来):海龟落在画布上,它可以向前、向后、向左、向右移动,海龟爬动时在画布上留下痕迹,路径即为所绘图形。
(1)移动控制函数
turtle.forward(distance) # 向前移动 , 参数distance用于指定画笔移动的距离,单位为像素 turtle.backward(distance) # 向后移动 turtle.goto(x,y=None) # 移动到指定位置
(2)角度控制函数
turtle.right(degree) # 向右转动, 参数degree用于指定画笔向右与向左的角度 turtle.left(degree) # 向左转动 turtle.seth(angle) # 转动到某个方向, 参数angle用于设置画笔在坐标系中的角度
(3)绘制函数
turtle.circle(radius, extent=None, steps=None) # 参数radius用于设置半径; # 参数extent用于设置弧的角度。 # 当radius为正时,画笔以原点为起点向上绘制弧线;radius为负时,画笔以原点为起点向下绘制弧线。 # 当extent为正时,画笔以原点为起点向右绘制弧线;extent为负时,画笔以原点为起点向左绘制弧线。 t.pencolor("green"); # 设置颜色 t.pensize(16); # 设置粗细
(4)图形填充
turtle.begin_fill() # 开始填充 turtle.end_fill() # 结束填充
练习案例:turtle绘制三角形
三角形内角和 360 (360/3 => 120) 前进+转向即可完成 for i in range(3): turtle.forward(200) # 前进 turtle.left(360/3) # 左转120度
练习案例:绘制多边形
练习案例: 绘制一个时针表盘效果
扩展案例:要求利用turtle和time绘制下图所示的钟表,并使钟表的日期、周日期、时间跟随本地时间实时变化。
10 logging模块
Python logging 模块定义了为应用程序和库实现灵活的事件日志记录的函数和类。
程序开发过程中,很多程序都有记录日志的需求,并且日志包含的信息有正常的程序访问日志还可能有错误、警告等信息输出,Python 的 logging 模块提供了标准的日志接口,可以通过它存储各种格式的日志,日志记录提供了一组便利功能,用于简单的日志记录用法。
日志分级别,标准级别及其适用性(从高到低的顺序):
日志级别等级排序:critical > error > warning > info > debug
级别越高打印的日志越少,反之亦然,即
- debug : 打印全部的日志( notset 等同于 debug )
- info : 打印 info, warning, error, critical 级别的日志
- warning : 打印 warning, error, critical 级别的日志
- error : 打印 error, critical 级别的日志
- critical : 打印 critical 级别
# 简单打印日志: import logging # 打印日志级别 def test_logging(): logging.debug('Python debug') logging.info('Python info') logging.warning('Python warning') logging.error('Python Error') logging.critical('Python critical') test_logging()
输出如下:
WARNING:root:Python warning ERROR:root:Python Error CRITICAL:root:Python critical
设置日志级别
通过 logging.basicConfig()
可以设置 root 的日志级别,和日志输出格式。
注意:Logging.basicConfig() 需要在开头就设置,在中间设置并无作用。
import logging # 打印日志级别 def test(): logging.basicConfig(level=logging.DEBUG) logging.debug('Python debug') logging.info('Python info') logging.warning('Python warning') logging.error('Python Error') logging.critical('Python critical') test()
输出如下:
DEBUG:root:Python debug INFO:root:Python info WARNING:root:Python warning ERROR:root:Python Error CRITICAL:root:Python critical
日志信息记录
# 日志信息记录到文件 logging.basicConfig(filename='D:/example.log', level=logging.DEBUG) logging.debug('This message should go to the log file') logging.info('So should this') logging.warning('And this, too')
在相应的路径下会有 example.log 日志文件。
日志信息格式
import logging # 打印日志级别 def test_logging(): # 设置日志级别 # logging.basicConfig(level=logging.DEBUG) # 日志信息记录到文件,同时设置日志级别 # logging.basicConfig(filename='D:/example.log', level=logging.DEBUG) # 日志信息记录到文件,同时设置日志级别, 消息时间 logging.basicConfig(filename='D:/example.log', level=logging.DEBUG,format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p') logging.debug('Python debug') logging.info('Python info') logging.warning('Python warning') logging.error('Python Error') logging.critical('Python critical') test_logging()
第三方模块
python官方未收录的,要先下载到, 导入后就可使用的第三方模块
模块下载
pip install 模块名称 pip install 模块名称 -i https://pypi.tuna.tsinghua.edu.cn/simple/
几个常用国内镜像源:
下载后的第三方模块所在位置:
...\Python\Lib\site-packages
常用第三方库
二维码:pyqrcode
pyqrcode
是一款 老牌 二维码生成模块了,安装之后三行代码就能搞定一个简单的二维码图片。
安装
pip install pyqrcode pip install pypng
代码如下:
import pyqrcode import png inpStr = "http://www.baidu.com" qrc = pyqrcode.create(inpStr) qrc.png("baidu.png", scale=6)
二维码:qrcode
安装
pip install qrcode
代码如下:
import qrcode qr = qrcode.QRCode( version=None, error_correction=qrcode.constants.ERROR_CORRECT_L, border=4, box_size=10 ) img = qrcode.make('http://www.baidu.com',version=4,border=4,box_size=12) img.save('bd.jpg') # 保存图片
qrcode
模块中最重要的方法是 qrcode.QRCode()
函数,其参数简单说明如下:
version
:二维码大小,1-40 不等;error_correction
:二维码纠错范围,4 个常量值在下文说明;box_size
:二维码中每个小格子包含的像素数;border
:边框,二维码与图片边界的距离。
其中,二维码纠错范围,可以选择 4 个常量:
- ERROR_CORRECT_L: 7%以下的错误会被纠正;
- ERROR_CORRECT_M (默认值): 15%以下的错误会被纠正;
- ERROR_CORRECT_Q:25%以下的错误会被纠正;
- ERROR_CORRECT_H:30%以下的错误会被纠正。
游戏:pygame
略~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具