python笔记-模块
1、模块定义
- 模块就好比是一个 工具包,要想使用这个工具包中的工具,就需要 导入import模块
- 每一个以扩展名 py 结尾的 python源代码文件都是一个模块
- 在模块中定义的全局变量、函数都是模块能够提供给外界直接使用的工具
2、模块的调用 - 方法1:直接导入整个模块,调用时需要在函数前加上模块名
点击查看代码
import my_first_module
total = my_first_module.total(3,4,5,6,787,8)
print(total)
print(my_first_module.add(15,90))
print(my_first_module.author)
my_first_module.author = 'miya'
print(my_first_module.author)
print('*' *40)
- 方法2:导入模块中的部分函数,调用时直接使用函数名
点击查看代码
from my_first_module import add,total
result = add(1,2)
print(result)
total = total(1,2,3,4,5,6,7,8,9)
print(total)
print('*' *40)
- 方法3:导入模块中的所有函数,调用时直接使用函数名
点击查看代码
from my_first_module import *
result = add(10,20)
print(result)
total = total(10,20,30,40,5,6,7,8,9)
print(total)
print('*' *40)
- 方法4:导入模块的某个函数,并将其名称进行重命名,调用时需要使用重命名后的函数名
点击查看代码
from my_first_module import add as adds
result = adds(16,18)
print(result)
4、包的定义
- 包是python模块的一种组织形式
- 将多个模块组合在一起,形成一个大的python工具库
- 包通常是一个拥有_init_.py文件的目录,它定义了包的属性和方法
5、包的调用
点击查看代码
from python学习.my_package import my_math,my_card
from python学习.my_package import *
result = my_math.add(45,67)
print(result)
my_card.menu()
my_card.input_error()
6、python常用的标准库
- os模块 提供了许多与操作系统交互的函数,例如创建、移动和删除文件和目录、以及访问环境变量等
- sys模块 提供了与python解释器和系统相关的功能,例如解释器的版本和路径,已经与stdin、stdout和stderr相关的信息
- time模块 提供了处理时间的函数,例如获取当前时间,格式化日期和时间、计时等
- datetime模块 提供了更高级的日期和时间处理函数,例如处理时区、计算时间差、计算日期差等
- random模块 提供生成随机数的函数,例如生成随机整数、浮点数、序列等
- math模块 提供了数学函数、例如三角形、对数函数、指数函数、常数等
- re模块 提供正则表达式处理函数,可以用于文本搜索、替换、分割等
- json模块 提供了json编码和解码函数,可以将python对象转换为json格式,并从json格式中解析出python对象
- urllib 提供了访问网页和处理url的功能,包括下载、发送post请求、处理cookies等
7、random模块库学习
- 使用前提:import random
- 生成一个随机小数(0-1)
点击查看代码
a= random.random()
print(a)
- 生成一个随机整数(需要指定范围)
点击查看代码
= random.randint(1,1000)
print(a)
- 随机获取列表中的元素,推荐使用random.choice()
点击查看代码
list1 = [15,94,62,45,76,47,18,13,52,33,532,56,64,77,66,55,44,22]
print(list1[random.randint(0,len(list1)-1)])
print(random.choice(list1))
print(random.choice('hello world'))
- 随机改变列表的元素顺序
点击查看代码
list1 = [15,94,62,45,76,47,18,13,52,33,532,56,64,77,66,55,44,22]
random.shuffle(list1)
print(list1)
8、re正则模块库
- 主要用于正则表达式处理,可以用于文本搜索、替换、分割等
点击查看代码
# 精确匹配字符串
text = "Hello World"
pattern = "Hello"
result = re.search(pattern, text)
print(result.group()) # 输出: Hello
- 常见的正则模块和描述
- \w 匹配字母数字及下划线
点击查看代码
pattern = r"\w+"
text = "Hello_world 123 test!"
result = re.findall(pattern,text)
print(result) #['Hello_world', '123', 'test']
- \W 匹配非字母数字下划线
点击查看代码
result = re.match(r'\W+','……&**b8%$#')
print(result)
<re.Match object; span=(0, 5), match='……&**'>
- \s 匹配任意空白字符,等价于[\t\n\r\f]
点击查看代码
pattern = r"\s+"
text = "hello world,hello\tworld,hello\nworld"
result = re.findall(pattern,text)
print('匹配的空白字符:',result) #匹配的空白字符: [' ', '\t', '\n']
- \S 匹配任意非空字符
- \d 匹配任意数字,等价于[0-9],后面加一个+号表示匹配连续的若干个数字
点击查看代码
pattern = r"\d+"
text = '我有3个苹果和12个橘子'
result = re.findall(pattern,text)
print('匹配的数字:',result) #匹配的数字: ['3', '12']
- \D 匹配任意非数字
- \A 匹配字符串开始
- \Z 匹配字符串结束、如果存在换行,只匹配到换行前的结束字符串
- \z 匹配字符串结束
- \G 匹配最后匹配完成的位置
- \n 匹配一个换行符
- \t 匹配一个制表符
- ^ 匹配字符串的开头
点击查看代码
text = "cat bat rat sat"
# ^ 匹配字符串开头
print(re.findall(r"^cat", text)) # ['cat']
'''
re.MULTILINE
^ 会匹配每一行的开头(即字符串开头 或 换行符 \n 之后的位置)
$ 会匹配每一行的结尾(即字符串结尾 或 换行符 \n 之前的位置
'''
pattern = r"^Hello"
text = "Hello world\nHello Python"
result = re.findall(pattern,text,re.MULTILINE)
print('匹配开头的字符串:',result) #匹配开头的字符串: ['Hello', 'Hello']
- $ 匹配字符串的结束
点击查看代码
text = "cat bat rat sat"
# $ 匹配字符串结尾
print(re.findall(r"sat$", text)) # ['sat']
pattern = r"Python$"
text = "Hello Python\nI Love Python"
result = re.findall(pattern,text,re.MULTILINE)
print('匹配结尾:',result) #匹配结尾: ['Python', 'Python']
- . 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符
点击查看代码
# .任意字符
result = re.match( r'^code\d-\d-.+$','code6-3-水仙花数')
print(result)
<re.Match object; span=(0, 12), match='code6-3-水仙花数'>
pattern = r"a.b"
text = "aab abb acb adb aub"
result = re.findall(pattern,text)
print('匹配a.b:',result) #输出结果:匹配a.b: ['aab', 'abb', 'acb', 'adb', 'aub']
- [...] 用来表示一组字符,单独列出:[amk]匹配'a','m'或'w'
点击查看代码
#字符集[...]
pattern = r"[aeiou]"
text = "hello world I love Python"
result = re.findall(pattern,text)
print('元音字母:',result) #元音字母: ['e', 'o', 'o', 'o', 'e', 'o']
#范围[a-z]
pattern = r"[A-Z][a-z]+"
text = "Hello world I love Python"
result = re.findall(pattern,text)
print('首字母大写:',result) #首字母大写: ['Hello', 'Python']
- [^...] 不在[]中的字符:[^abc]匹配除了a、b、c之外的字符
点击查看代码
#排除字符[^...]
pattern = r"[^aeiou]"
text = "hello world "
result = re.findall(pattern,text)
print('非元音字母:',result) #非元音字母: ['h', 'l', 'l', ' ', 'w', 'r', 'l', 'd', ' ']
-
- 匹配0个或多个表达式
点击查看代码
pattern = r"ab*c"
text = "ac abc abbc abbbc"
result = re.findall(pattern,text)
print('ab*c的结果是:',result) #ab*c的结果是: ['ac', 'abc', 'abbc', 'abbbc']
-
- 匹配1个或多个表达式
点击查看代码
pattern = r"ab+c"
text = "ac abc abbc abbbc abbbbc"
result = re.findall(pattern,text)
print('ab+c的结果是:',result) #['abc', 'abbc', 'abbbc', 'abbbbc']
- ? 匹配0个或1个渔鸥前面的正则表达式定义的片段,非贪婪方式
点击查看代码
pattern = r"colou?r"
text = "color colour"
result = re.findall(pattern,text)
print('colou?r匹配结果:',result) #colou?r匹配结果: ['color', 'colour']
- {n} 精确到匹配n个前面的表达式
点击查看代码
#{n,} 匹配至少n次
pattern = r"\d{3,}"
text = "1 12 123 1234 12345"
result = re.findall(pattern,text)
print('至少三位数:',result) #至少三位数: ['123', '1234', '12345']
- {n,m} 匹配n到m次由前面的正则表达式定义的片段,贪婪方式
点击查看代码
pattern = r"\d{3,5}"
text = "1,12,123,1234,12345,123654,1237654"
result = re.findall(pattern,text)
print("长度是3-5位数字:",result) #长度是3-5位数字: ['123', '1234', '12345', '12365', '12376']
- a|b 匹配a或b
点击查看代码
result = re.match(r'^a|b$','b')
print(result)
- () 匹配括号内的表达式,也表示一个组
点击查看代码
pattern = r"(ab)+"
text = "ab abab ababab"
result = re.findall(pattern,text)
print("(ab)+:",result) #(ab)+: ['ab', 'ab', 'ab']
9、time模块
- time.time()打印当前时间戳
点击查看代码
timestamp = time.time()
print('打印当前时间戳:',timestamp)
print("打印当前时间戳整数部分",int(timestamp))
- time.localtime()结构化时间显示
点击查看代码
struct_time = time.localtime()
print('结构化当前时间:',struct_time)
print(f"年份:{struct_time.tm_year}")
print(f"月份:{struct_time.tm_mon}")
print(f"日期:{struct_time.tm_mday}")
print(f"小时:{struct_time.tm_hour}")
print(f"分钟:{struct_time.tm_min}")
print(f"秒:{struct_time.tm_sec}")
print(f"星期几(0-6,0=周一):{struct_time.tm_wday}")
print(f"一年中的第几天:{struct_time.tm_yday}")
print(f"夏令时标志:{struct_time.tm_isdst}")
- time.ctime()人类常用的时间显示
点击查看代码
formatted_time = time.ctime()
print(f"格式化时间字符串:{formatted_time}")
- time.strftime()自定格式时间显示
点击查看代码
struct_time = time.localtime()
formatted = time.strftime('%Y-%m-%d %H:%M:%S', struct_time)
print(f'常规年月日时分秒显示:{formatted}')
- 常用格式化符号
formats = {
"%Y": "四位数的年份",
"%y": "两位数的年份",
"%m": "月份 (01-12)",
"%d": "月内中的一天 (01-31)",
"%H": "24小时制小时数 (00-23)",
"%I": "12小时制小时数 (01-12)",
"%M": "分钟数 (00-59)",
"%S": "秒数 (00-59)",
"%p": "AM或PM",
"%a": "简化的星期名称",
"%A": "完整的星期名称",
"%b": "简化的月份名称",
"%B": "完整的月份名称",
"%c": "日期和时间表示",
"%j": "一年中的第几天 (001-366)",
"%w": "星期几 (0-6, 0=周日)",
"%x": "日期表示",
"%X": "时间表示",
"%Z": "时区名称",
}
10、turtle模块
- 创建窗口
点击查看代码
screen = turtle.Screen()
screen.bgcolor("white") #背景颜色
screen.title("Turtle绘图") #窗口标题
screen.setup(width=600, height=600) #窗口大小
- 获取窗口信息
点击查看代码
print(f"窗口大小:{screen.window_width()}x{screen.window_height()}")
print(f"背景颜色:{screen.bgcolor()}")
- 创建画笔
点击查看代码
pen = turtle.Turtle() #标准创建方式
pen1 = turtle.Pen() #另一种创建方式
- 设置画笔属性
点击查看代码
pen.color("red") #画笔颜色
pen.pensize(5) #设置画笔粗细
pen.speed(0) #绘制速度(0-10,0最快)
pen.pencolor('blue') #画笔颜色(同color)
pen.fillcolor('yellow') #填充颜色
pen.pen(pencolor='perple',pensize=5) #一次性设置多个属性
- 设置画笔形状
点击查看代码
pen.shape('turtle') #形状为乌龟
pen.shape('arrow') #箭头
pen.shape('circle') #圆形
pen.shape('square') #正方形
pen.shape('triangle') #三角形
pen.shape('classic') #经典(箭头)
-
设置画笔速度详解
speeds ={
0:"最快(无动画)",
1:"最慢",
3:"慢速",
6:"正常速度",
10:"快速"
} -
向前移动
pen.forward(100) #向前移动100像素
pen.fd(100) #forward简写 -
向后移动
pen.backward(100) #向后移动100像素
pen.back(50) #backward简写
pen.bk(50) #backward简写 -
转向控制
pen.right(90) #向右转90度
pen.rt(90) #right简写
pen.left(45) #向左转45度
pen.lt(45) #left简写 -
获取当前朝向角度
print(f"当前朝向角度:{pen.heading()}度") -
移动到指定坐标
pen.goto(100,100) #移动到坐标(100,100)
pen.setpos(100,100)
pen.setposition(100,100) -
移动到初始位置
pen.home() #回到原点(0,0) 方向朝东 -
显示或隐藏画笔
pen.hideturtle() #隐藏乌龟图标
pen.ht() #hideturtle简写
pen.showturtle() #显示乌龟光标
pen.st() #showturtle简写 -
画笔状态控制
点击查看代码
print("初始状态-笔落下")
pen.forward(100) #会画线
print("抬起笔")
pen.penup() #抬起笔,移动时不会画线
pen.pu()
pen.up()
pen.forward(50) #移动不画线
pen.right(90)
print("放下笔")
pen.pendown() #放下笔,移动时会画线
pen.pd()
pen.down()
pen.forward(100) #会画线
#检查画笔状态
print(f"笔是否落下:{pen.isdown()}")
11、socket模块库
- socket模块提供了低级别的网络通信接口,允许在不同计算机之间或同一计算机的不同进程之间进行数据交换。
- 地址类型
AF_INET: IPv4 (最常用)
AF_INET6: IPv6
AF_UNIX: Unix domain socket - 通用操作:创建socket
点击查看代码
TCP socket (流式socket)
socket_tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
UDP socket (流式socket)
socket_udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
UNIX domain socket (本地进程间通信)
sock_unix = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
- tcp server常用操作绑定地址和端口
server.bind(('0.0.0.0', 9999)) - tcp server常用操作监听客户端最大连接数
server.listen(5) - tcp server常用操作接受客户端的连接
client_socket,address = server.accept() - tcp server常用操作接收数据
data = client_socket.recv(1024) - 判断数据不为空则对数据进行utf-8解码
点击查看代码
if not data:
break
#接收到的数据进行utf8解码
messages = data.decode("utf8")
print(f"[来自{address}]{messages}")
- tcp server常用操作发送响应数据
respone = f"服务器已收到:{messages}"
client_socket.send(respone.encode("utf8")) - tcp client常用操作连接服务器
client.connect(('127.0.0.1', 8888)) - tcp client常用操作获取用户输入数据
messages = input("请输入消息(输入'quit'退出):") - tcp client常用操作发送数据
client.send(messages.encode('utf-8')) - tcp client常用操作接收响应
response = client.recv(1024)
print(f"服务器的响应:{response.decode('utf-8')}") - udp server常用操作接收数据
data, address = server.recvfrom(1024) - udp server常用操作发送响应
点击查看代码
messages = data.decode('utf-8')
print(f"[来自{address}]:{messages}]")
#发送响应
response = f"UDP服务器已收到:{messages}"
server.sendto(response.encode('utf-8'), address)
- udp client常用操作发送数据
client.sendto(messages.encode('utf-8'), server_address) - udp client常用操作接收响应
点击查看代码
#接收响应
response, _ = client.recvfrom(1024)
print(f"服务器响应:{response.decode('utf-8')}")
- 客户端和服务器建议使用try finally: 关闭socket连接
12、第三方库
- 连接国外的pip服务器下载慢,可以更新为国内服务器
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple - 查看更新pip源信息
pip config get global.index-url

浙公网安备 33010602011771号