python复习
来源:互联网 发布:淘宝转换微信链接 编辑:程序博客网 时间:2024/05/29 02:29
最近准备做个小型搜索引擎,爬虫准备用python写,好久没碰python,复习一下。
一.关于python解释器和编译器的问题
这个问题我也是看了几位大神的博客才弄明白的,都知道python的解释型的语言,可是他还和js那种纯的解释型语言不一样,先看一个图
python由三个主要部分组成,运行语句的解释器,将.py文件转换为.pyc文件的编译器,以及运行.pyc文件的虚拟机,是的,python的最终执行也是建立在虚拟机之上的,我们知道java是预编译型语言,也就是,源代码经编译器编译后,最终由虚拟机解释执行.class文件,C++是编译型语言,源代码经编译后直接生成机器码执行。对比之下,当运行.py文件时,python会自动创建相应的.pyc文件,之后又虚拟机执行,那既然这样那我们为什么又说python是解释型语言呢,是这样的,当运行一个python程序的时候,编译后的结果是保存在内存中的,只有当程序运行完之后,才会在将代码写入硬盘生成.pyc文件,那么下次在用该部分代码时就不用再重复上述步骤了,直接调用.pyc文件就可以了,这种运行机制,最主要体现的就是在导入模块的时候用到,试想,比如调用sklearn库,每次都重复编译,是不是特别浪费啊。
二.python基础知识
这部分我想以代码的形式比较好,需要注意的问题我都写了注释,jupyter代码复制比较麻烦,我截的图
三.正则表达式
1.基础
正则表达式是一组用来简洁表达一组字符串的表达式
r='p(y|yt|yth|ytho)?n'p = re.compile(r)
这里需要注意,这里的r只是表达正则规则的一个字符串,p经过编译后才是表达正则表达式的特征,许多人这个概念还不是很清楚
正则表达式常用的字符:
. 表示任何单一字符[ ] 字符集,给出单一字符的取值范围 [abc][^ ] 对单个字符给出排除范围 [^abc] 表示非a或b或c* 前一个字符扩展0次或无限多次+ 前一个字符拓展1次或无限 ? 前一个字符拓展0次或一次| 或{m} 前一个字符重复次数为m{m,n} 前一个字符重复次数为m到n次^ 匹配字符串的开头 ^abc表示abc匹配字符串的开头$ 匹配字符串的结尾( ) 分组,里面只可以用|\d 等价于[0-9]\w 单词字符,等价于[A-Za-z0-9_]
2.几个经典的小例子
^[A-Za-z]+$ 26个字母组成的字符串^-?\d+$ 整数形式的字符串^[1-9]\d*$ 正整数形式的字符串[1-9]\d{5} 邮政编码6位\d{3}-\d{8}|\d{4}-\d{7} 国内电话号码 010-65535333
下面看一个比较复杂的,IP地址:
IP地址分为4段,每段为0-255,因为范围不是0-9的那种,对于这种,我们分开来考虑这个问题:
0-99:[1-9]?\d100-199: 1\d{2}200-249: 2[0-4]\d250-255: 25[0-5]和起来就是:([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5].){3}([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5])
对于一般的正则表达式,只要认真点,一般都能写出来,当然更加复杂的表达式,还是需要我们慢慢积累的
3.python中对正则的处理
python 中提供了re库import re
当表达式含有转义字符时:r'\dbc'
前面加一个r
re库几个常用的函数:
re.search() 找到第一个位置,返回match对象re.match() 从开始位置匹配,返回match对象re.findall() 找到全部,返回match列表re.split() 将一个字符串按照正则表达式匹配结果进行分割,返回列表
例子
import rep = r'[1-9]{2}'s = re.search(p,'123ab')print(s.group(0))输出:12
另一种等价的写法
p = re.compile(r'[1-9]{2}')s = p.search('123ab')print(s.group(0))
这种编译后多次操作,更快
关于match对象
match对象是一次性的匹配结果,包含匹配的很多信息,
print(type(s),s.re,s.pos,s.endpos,s.start())结果<class '_sre.SRE_Match'> re.compile('[1-9]{2}') 0 5 0
我觉得这种要是忘了查一下就可以了,没必要死记
Re库的贪婪匹配和最小匹配
p = r'p.*n'match = re.search(p,'python')print(match.group(0))输出为:python
输出为最长子串
如果想输出最小子串:
*? +???{m,n}?
通过加?实现
- python复习
- python 复习
- python复习
- python复习
- python复习笔记
- Python的复习(上)
- Python复习整理
- Python基础复习
- python 基础复习笔记
- day14 python logging复习
- Python day14 logger复习
- Python快速复习
- 温故而知新-python语法复习
- python复习。知识点小记
- python复习。知识点小记
- Python 基础复习
- python 练习--知识点复习
- python复习笔记
- 离线安装Tensorflow、Keras、OpenCV(任意库)
- 使用注解配置spring
- C语言小游戏---扫雷
- python(3)——实现购物车的程序
- vhost xml配置
- python复习
- 大明A+B(大数相加)解题报告
- shiro知识汇总
- Nepire的校OJ入门题解—蓝桥选拔篇(伪最终回)
- 景格虚拟教具混合动力汽车动力系统虚拟结构原理展示台复制狗
- 优先队列---二叉堆
- Partition Equal Subset Sum解题报告
- Java虚拟机基础知识
- arduino学习笔记5 舵机控制