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
posted @ 2025-12-16 20:00  jake瑞  阅读(9)  评论(0)    收藏  举报