【Python查漏补缺(八)】正则表达式(回顾+拓展)
之前有说过正则表达式,这里不想水了,直接上🔗链接.
文章链接
正则表达式回顾匹配单个字符
. 任意单个字符
[] 括号列举的字符
/d 数字/D 非数字
/s 空白 /S 非空白
/w 非特殊字符(数字字母汉字下划线 /W 特殊字符
匹配多个字符
匹配前一个字符0到多次*
匹配前一个字符1到多次+
匹配前一个字符0-1次(非贪婪匹配)?
匹配前一个字符m次 {m}
匹配前一个字符至少m次 {m,}
匹配前一个字符m到n次{m,n}
分组匹配
首先了解分组是什么东西!一个括号()中的东西就可以是一个分组.
对于分组的操作, 可以取分组中的|左右的任意字符,也可以对分组其别名,方便后面复用.
| 匹配左右任意一个表达式
(ab) 将括号中字符作为一个分组
\num 引用分组num匹配到的字符串
(?P<name>) 分组起别名
(?P=name) 引用别名为name分组匹配到的字符串
Request需求
需求1:在列表中[“apple”, “banana”, “or ...
【Python查漏补缺(七)】FastAPI网络编程
Python之Socket网编之前已经聊过了,这里不想过多赘述.复习的话可以跳转之前的学习界面
这里主要说一下遗忘的点
多线程的创建时机
服务端的套接字会在什么时候阻塞
服务端套接字.accept()接收到的是什么东西
Answer
回答一下上面的问题:
多线程应该放到死循环中创建,例如while True, 因为一台服务器要维护多个与客户端的连接,将
sock, addr = server.accept()和threading.Thread(target=xxx, args=(socket_io,)).start()放到一起,每当出现新的客户端连接就创建一个线程
什么时候阻塞: 比如服务端创建了一个套接字: server = socket.socket()会在两个地方阻塞
socket_io, address = server.accept()这里等待客户端连接会阻塞
bytes_data = socket_io.recv(1024)等待客户端发送数据的时候也会阻塞
socket_io, address & ...
【剑指offer】字符串
剑指offer字符串相关操作
题目1:请实现一个函数,把字符串 s 中的每个空格替换成”%20”。
理解Code
很简单的题目, 但是重点在于实现的方式有多种, 这里主要介绍三种实现方式.
字符串函数replace
字符串函数join
遍历字符串, 然后借助列表存储元素.
Demo1234567891011121314151617181920212223242526# 请实现一个函数,把字符串 s 中的每个空格替换成"%20"# 类名要使用大驼峰方式命名, 函数名要使用小驼峰方式命名class Solution(): # 定义替换空格的函数, 实现传入一个字符串,返回一个处理过的字符串 def replaceSpace(self, s1:str) -> str: # 方法一实现 str = s1.replace(' ', '') return str def replaceSpace2(self, s: str) -> str: # ...
【Python-ETL】ETL前置知识
本文主要介绍Python之ETL的前置知识点!肥肠重要
在开始之前聊一下一个点,就是Python中会有很多操作路径的地方(例如文件打开),这里如果单纯从Explore拷贝路径例如
C:\Users\Stray\PycharmProjects\Project
Python是读取不了的,
解决办法
写两个\,就是在\后面加上一个\
路径前面写r”C:\Users\Stray\PycharmProjects\Project“
这样Python就能识别了.
按照重要性依次递减如下PymysqlOS模块UnitTest单元测试Log日志Time模块Recursion递归
Pymsql
pymysql是什么这里就不多bb了,贴上两个链接🔗
github官网
官方文档
Tips
非事务性的SQL是不需要提交的cursor.commit()什么是非事务性的操作, 就是查询select
pymysql采用事务方式实现增删改操作,还要手工提交数据
cursor.fetchone() 适合获取数据表中指定的某条数据, 格式为元组
cursor.fetchall() 获取数据表中的所有 ...
【剑指offer】栈和队列
栈Stack定义Definition
栈: 只允在一端进行插入或删除操作的线性表。
特点: 后进先出
队列Queue定义Definition
队列是一种先进先出的线性表。
它只允许在表的一端进行插入,而在另一端删除元素。在队列中允许插入的一端叫做队尾,允许删除的一端则称为队头。
特点: 先进先出
剑指offer题目
用两个栈实现一个队列。
队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
示例1:
1234输入:["CQueue","appendTail","deleteHead","deleteHead","deleteHead"][[],[3],[],[],[]]输出:[null,null,3,-1,-1]
示例2:
1234输入:["CQueue","deleteHead",&quo ...
【Python查漏补缺(六)】JSON文件操作
首先认识一下JSON格式:(两种格式)
数组/集合格式: 类似于Python中列表套字典[{}, {}, {}]
[obj,obj,obj…]
对象格式: 类似于Python中的字典{}格式
{“key1”:obj,”key2”:obj,”key3”:obj…}
s
四个函数实现JSON和Python之间的交互
※json.load 从json文件中加载数据(自动加载为python类型的数据※json.dump 将python中的数据写入到json文件中 json.loads 把字符串类型的json数据转换为字典 json.dumps 把字符串类型的数据存储到json文件中
json.load对Json文件进行读取
12345import jsonwith open("stu.json", "r", encoding="utf8") as f: data = json.load(f) print(data) print(type(data))
j ...
【数据结构】顺序表和链表
今天偶然间发现了之前考研电脑的文档, 我想看一看吧,一看我人都傻了,欺负我这个半年没学习数据结构的考研er,这好吗,这不好.于是就想把之前的东西给整理下,以后方便复习.
线性表Linear List
线性表(linear list)是n个具有相同特性的数据元素的有限序列。
线性表是一种在实际中广泛使用的数据结构,
常见的线性表:顺序表、链表、栈、队列、字符串...
顺序表Contiguous List定义
线性表的顺序存储称为顺序表,用一组地址连续的存储单元依次存储线性表中的数据元素。
即顺序表的两元素不仅逻辑相邻,物理位置也相邻。逻辑顺序与物理顺序相同
在大学学习的过程中使用最多的就是c语言中的数组了吧!
特点
支持随机访问 (即通过元素序号和首地址下标在O(1)时间复杂度内找到该元素)
存储密度高 (即每个节点都存储数据元素)
插入和删除需要移动大量元素 (因为顺序表逻辑上相邻的元素物理上也相邻,修改一个元素则需要变更很多)
顺序表考查角度
解题一般使用暴力解法
枚举法
枚举法是最容易想到的方法,把所有可能的情况都考虑到,然后从中选出符合题目要求的情况,通常使用fo ...
【数据结构】时间和空间复杂度
纯纯的复习, 主打的就是一手温故知新.
定义
时间复杂度是对时间增长速度的一个估计
可以简单的用极限理解,若所有指令总执行次数T,时间复杂度为O(f(n))的算法表示 = K(K为常数)。
例如T1=n2+n,T2=2n2-n,通过极限的思想得到这两个算法的f(n)=n即时间复杂度都是O(n)
因为log2n=log23*log3n,而log23是常数,所以O(log2n)=O(log3n),考虑复杂度时,所有的log都尽量写成log2n或者logn的形式。
举3个栗子搞定时间复杂度Demo1(每一层的变量都是自增1)12345for (i=0;i<n;i++) for (j=0;j<n;j++) for (k=0;k<n;k++) if (A[i][j]>A[i][k]+A[k][j]) A[i][j]>A[i][k]+A[k][j];
上面代码的每一层都是变量自增,且变量都是从0~n-1共n次 ...
【Python查漏补缺(五)】学生管理系统(双版本)
开始之前首先讲一下遇到最大的两个坑.
在系统初始化之前,先从MySQL数据库中拉取数据,这里使用cursor.fetchall读取到所有的数据是元组套元组的形式.然后我用for遍历,在for循环外面定义了个字典,将遍历到的每个元组转换为字典的value值.然后坑爹的来了,由于字典我放在了for循环外面定义, 导致字典只有一个地址,每次读取到数据存入字典中,然后append到list,始终是元组的最后一组值.
1234567891011121314stu_dict = {} # 这里字典位置应该放到for循环里面的嗷data = cursor.fetchall() # 将从数据库中获取的数据写入到列表中 for i in data: # 这个字典,我开始放在了for循环上面,但实际上是错误的 """ 局部变量和全局变量的区别,for循环中定义,定义三次,每次的地址都不一样 如果放在外边,只有一个地址,内容发生变化,之前存储的内容也会变(尝试解释一通 &q ...
【Java查漏补缺(二)】面向对象
Retrospection
Java中方法的定义:
1234修饰符 (public static) 返回值的数据类型 (void/int/boolean...) 方法名(数据类型 参数名1, 数据类型 参数名2) { 方法体; return 具体的返回值;(如果返回值是void类型可以不写)}
其中修饰符,可以简单的理解为: public static(后续会说的)
具体案例:
1234public static int getSum(int a, int b){ int sum = a + b; return sum;}
方法重载OverLoaded
简单理解方法重载: 就是在同一个类中, 出现方法名称相同, 但是参数列表不同(参数个数, 参数的数据类型不同)两个或两个或者多个方法
1234567891011121314151617181920212223242526272829303132/*方法重载: 在同一个类中, 出现方法名称相同, 但是参数列表不同的(个数不同,对应的数据类型不同)的两个或多个 ...