pythonLearing
字符串的格式化
使用format进行格式化
1 | # 索引插入 |
格式控制
1 | context = "{:-^20}".format("Train") # ^表示居中,-表示填充字符 |
还有两个不写了 # 文本进度条 tqdm库 # 正则表达式 特殊字符: “.”,代表一个任意字符 “”,代表任意多个字符(包括0个)(表示前面的字符可以出现任意多次)”+“,代表至少一个字符(表示前面的字符可以出现任意多次)(与的区别就是有没有0次)”{a}“,代表a个字符(表示{}前面的字符可以出现a次)”?“,代表0个或1个字符 # 取消贪婪模式”,代表数字,即0-9 “”,代表非数字 “”,代表空白,即空格、tab键 “”,代表非空白 “”,代表单词字符,即a-z、A-Z、0-9、_共47个字符 “”,代表非单词字符 “[abc]”,代表a、b、c三个字符中的任意一个 # []中可以放多个字符,表示其中任意一个字符([]中的特殊字符相当于加了转义) “^”,代表字符串开头 “$”,代表字符串结尾 分组:(),将括号中的内容作为一个分组,可以单独取出来
数据结构
if
1.字符串可以比较大小,比较的是ASCII码 print(‘apple’ > ‘banana’) # False 2.列表可以比较大小,比较的是第一个元素的大小,如果第一个元素相等,则比较第二个元素的大小,以此类推 print([1,2,3] > [1,2,4]) # False 3.元组可以比较大小,比较的是第一个元素的大小,如果第一个元素相等,则比较第二个元素的大小,以此类推 print((1,2,3) > (1,2,4)) # False 4.字典可以比较大小,比较的是第一个键值对的大小,如果第一个键值对相等,则比较第二个键值对的大小,以此类推 print({‘a’:1,‘b’:2} > {‘a’:1,‘b’:3}) # False 5.print(10 == ‘10’) # False 6.print(10 == 10.0) # True 7.print(10 < ‘10’) # 结果报错 8.if x == true,可以简写为if x if 可以写链式表达 判空用 is None 与或非的顺序:先执行非(!),再执行与(and),最后执行或(or) 9.海象运算符 if (n := len(a)) > 10: print(n) # 等价于 n = len(a) if n > 10: print(n) 10.三元运算符 x = 1 if condition else 2 11.断言 assert condition, ‘message’ 如果condition为False,则抛出AssertionError,并输出message 12.三元运算符和断言的结合 x = 1 if condition else assert False, ‘message’
for
1 | for i in range(10): |
enumerate:可以同时输出索引和值
字典遍历: 1
2
3
4
5
6
7dict = {'a':1,'b':2,'c':3}
# 只会输出key
for key, value in dict.items():
print(key, value)
# 会输出key和value
for i in dict.items():
print(i)
zip: 1
2
3
4
5
6
7year = [2020,2021,2022,2023,2024,2025]
score = [600,601,602,603,604,605]
for i in zip(year, score):
print(i)
sentiment = ['kaixin', 'shangxin', 'kaixin', 'shangxin']
for i in zip(year, score, sentiment):
print(i)
效率: map reduce:把同一个任务放到不同的节点上进行运算,最后汇总结果
map: 1
2
3
4
5 import time
start = time.perf_counter()
# squares = [x ** 2 for x in range(1000000)]
squares = map(lambda x: x**2, [x for x in range(1000000)])
print(time.perf_counter() - start)
iterable:迭代对象,惰性求值
python内置函数,作用就是将一个函数应用于一个或多个迭代对象上,并返回一个迭代器
map可以处理多个list
filter: 1
2
3
4
5import time
start = time.perf_counter()
# squares = [x ** 2 for x in range(1000000)]
squares = filter(lambda x: x%2 == 0, [x for x in range(1000000)])
print(time.perf_counter() - start)
while
扩展: 1
2while:
else: # 当while循环正常结束时,会执行else
time库
1 | import time |
random库
1 | import random |
异常处理
1 | # except 与 else是互斥的 |
with
with语句用于简化资源管理,例如文件操作、网络连接等。在with语句中,资源会在进入语句时自动打开,在语句结束时自动关闭,无需手动调用close()方法。
1
with open('file.txt', 'r') as f:
函数调用
可变位置传参:
1 | def fact(n, *b): |
n位必选参数,b为可变参数,(意思为b有多个参数,表示一个数量不固定的元组)
关键词可变参数:
1 | def show_info(**kwargs): |
意思是这个函数地传入的关键词有多少我也不知道,以字典的形式存储。
从函数定义的角度来看,$**kwargs $也必须放在参数列表的最后面
位置可变,关键词可变组合使用:
1 | def dome(a,b,*args,c=0,**kwargs): |
return返回值
1 | def fe(): |
return 可以返回多种类型,但是以元组的形式打包
函数的高阶返回
1 | def create_add(x): |
局部变量与全局变量
一:全局变量与局部变量不一致
1 | n, s = 10,100 |
使用全局变量声明:
1 | n, s = 10,100 |
二:局部变量为组合数据类型且未创建,等同于全局变量
1 | ls = ['f', 'F'] |
1 | ls = ['f', 'F'] |
lambda函数:
1 | <函数名> = lambda <参数>: <表达式> |
1 | f = lanbda x,y : x+y |
函数递归:
1.链条
2.基例
1 | # 阶乘 |
1 | # 字符串反转 |
1 | # 上台阶问题 |
1 | # 汉诺塔 |
字典:
键值对
键不能重复,键是唯一的
1 | test = {"name":"wangdacui", 'age':18, 'age':20} |
字典的使用;
1 | test = {"name":"王大锤","age":18} |
jieba库的使用:
2018年之前,分词很重要
分词:
1.基于规则得到分词:(效果很差)
正向最大匹配(FMM) 逆向最大匹配(RMM) 双向最大匹配(取最好)
2.基于统计的分词
基于N-Gram模型的分词(2-语言模型)(预测、文本纠错,评价)
3.基于深度学习的分词(序列标注–>BIO)
关键词提取
1.TF-IDF
2.TextRank
open函数
1 | tf = open(“f.txt”, rt, encoding = "utf-8") |
UTF-8编码,每个中文是3个字节
读文件: a.read()、 a.readline()、 a.readlines()
写文件:
a.write()、a.writeline()
a.seek(offest)
<变量名> = open(<文件名>,<打开模式>)
路径:
绝对路径
相对路径 :{执行目录、目标文件} –> [“.”代表当前目录;“..”代表上一层目录;“/”代表下一层目录]
执行目录是指你执行py文件的目录,不一定与py文件处于同一目录。用相对路径对文件需要以执行目录为准!!
打开模式:
| “r” | 只读 |
| “w” | 覆盖写 |
| “x” | 创建写 |
| “a” | 追加写 |
| “b” | 二进制 |
| “t” | 文本 |
| “+” |
文件内容读取:
(相当于有一个光标,读到哪里光标移动到哪里,前面读过的不会再读了)
a.read()、全部读取;a.read(size=2),读取前两个字符
a.readline()、读第一行;
a.readlines()、读所有行(以list表示);
文件内容写入:
a.write()、 直接写
a.writeline()、 把一个迭代对象写进去,但是会拼接到一起
a.seek(offest) :
调整光标的位置
a.seek(0) 移动到开头
a.seek(1) 当前位置
a.seek(2) 移动到结尾
数据维度:
一维:线性列表
数据有序:列表:a = [1,2,3]
数据无序:集合: a = {1,2,3}
存储:
符号分隔:使用符号进行分割保留存储结构。(数据中不能有相对应的符号)
处理:
split()、join()
二维:表格形式
列表嵌套:a = [[a,b,c],[d,e,f]]
存储: csv文件,存储一个table
面向对象编程
类与对象
类和对象(实例)都有各自独立的存储空间
查找属性的时候先找对象再找类
方法分为:普通方法与内置方法
类中的方法中的self是什么意思?
—> 调用类方法的对象本身
私有属性:
类的外部不能访问,得用set,get方法
构造方法:
内置方法之一,方法名是__ init __,对象被创建优先调用
析构方法:
__ del __,对象被销毁的时候调用
(stu3 = stu2,指针传递)
1.局部变量作用域结束
2.使用del
3.程序结束
str方法:
输出的样式
比较内置方法
继承
如何通过继承的方式创建类:
class 子类名(父类名……. )
方法重写与鸭子类型
机器学习
监督,无监督,强化(RL)
监督–>传统监督,半监督
–>分类,回归
爬虫
http
网页的组成:html,css,javascript
ctrl + shift +c
<div> <span>
<h1> - <h6>
<p>
<a>
request访问网站
beautifulsoup4 解析网站



