python基础
基础
数据类型
字符串,数字,布尔,列表,元组,集合,字典
不可变数据3个:Number,String,bool
可变数据3个: List,Dictionary,Set
高级数据类型:bytes
1 | # 数字 |

列表[]
获取,修改,删除,(数组形式)插入
1 | list = [1,2,3] |
列表函数
序号 | 函数 |
---|---|
1 | len(list) 列表元素个数 |
2 | max(list) 返回列表元素最大值 |
3 | min(list) 返回列表元素最小值 |
4 | list(seq) 将元组转换为列表 |
列表方法
1 | list.append(obj) 在列表末尾添加新的对象 |
---|---|
2 | list.count(obj) 统计某个元素在列表中出现的次数 |
3 | list.extend(seq) 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表) |
4 | list.index(obj) 从列表中找出某个值第一个匹配项的索引位置 |
5 | list.insert(index, obj) 将对象插入列表 |
6 | [list.pop(index=-1]) 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值 |
7 | list.remove(obj) 移除列表中某个值的第一个匹配项 |
8 | list.reverse() 反向列表中元素 |
9 | list.sort( key=None, reverse=False) 对原列表进行排序 |
10 | list.clear() 清空列表 |
11 | list.copy() 复制列表 |
元组()
元组数据只能读取,不可以修改
字典
键值对形式key,value
读取和修改和设置:数组形式
集合{}
集合里面的值唯一
if条件
1 | n = 8 |
循环
while循环
1 | n = 1 |
for循环
1 | list = [1,2,3,55,66,77] |
range函数
遍历数字序列时候可以用range函数
1 | for i in range(2,25): |
九九乘法表
1 | i = 1 |
推导式
列表推导式
1 | # 列表推导式:打印0-40内的偶数 |
字典推导式
1 | dic = { "name":"zou","age":22,"sex":"男"} |
函数
1 | def add (num1,num2): |
lambda函数
1 | x = lambda a ,b:a+b |
模块

文件输入与读取
1 | # 文件输入 |
模式 | 描述 |
---|---|
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 |
w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
w+ | 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
异常
处理异常:try except
抛出一个异常 : raise
1 | # 捕获异常 |
类
类的作用是创建对象
1 | class my: |
类有一个名为 init() 的特殊方法(构造方法),该方法在类实例化时会自动调用,像下面这样:
1 | #!/usr/bin/python3 |
类的基础
子类(派生类)父类(基类)
1 | class people: |
命名空间与作用域
内置命名
python内置的名称:abs,char,exception
全局命名
每一个模块的变量,也就是每一个.py文件的变量
局部命名
函数里面的变量
命名空间的查找顺序
局部==》全局==》内置
作用域
全局作用域和局部作用域
标准库
os模块:系统相关,文件夹和文件相关
sys模块:python解释器相关
time模块:处理时间的函数
datetime模块:高级日期和时间处理
random模块:生成随机数的模块
math模块:数学函数模块
re模块:正则表达式的模块
json模块:Json格式的模块
urllib模块:网页和url的模块
当前文件目录:os.getcwd()
当前时间: datetime.date.today()
1 | import datetime |
pip
pip 是 Python 包管理工具,该工具提供了对 Python 包的查找、下载、安装、卸载的功能。
查看版本
1 | pip --version |
安装包
1 | pip install numpy |
移出包
1 | pip uninstall numpy |
查看安装的软件包
1 | pip list |
request
1 | # 导入 requests 包 |
1 | import requests |
正则表达式
字符类
[0-9] | 匹配任意数字,类似与[0,1,2,3,4,5,6,7,8,9] |
---|---|
[a-z] | 匹配任何小写字母 |
[A-Z] | 匹配任何大写字母 |
[a-zA-Z0-9] | 匹配任何字母及数字 |
[aeiou] | [aeiou] |
[^aeiou] | 除了aeiou字母以外的所有字符 |
[^0-9] | 匹配除了数字外的字符 |
[Pp]ython | 匹配 “Python” 或 “python” |
特殊字符类
. | 匹配除 “\n” 之外的任何单个字符。要匹配包括 ‘\n’ 在内的任何字符,请使用象 ‘[.\n]’ 的模式。 |
---|---|
\d | 匹配一个数字字符。等价于 [0-9]。 |
\D | 匹配一个非数字字符。等价于 [^0-9]。 |
\s | 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。 |
\S | 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。 |
\w | 匹配包括下划线的任何单词字符。等价于’[A-Za-z0-9_]’。 |
\W | 匹配任何非单词字符。等价于 ‘[^A-Za-z0-9_]’。 |
[^aeiou] | 除了aeiou字母以外的所有字符 |
[^0-9] | 匹配除了数字外的字符 |
re模块符号
^ | 以什么开头 |
---|---|
$ | 以什么结尾 |
+ | 至少一个 |
? | 0个或一个 |
{n} | 表示n个 |
{n,m} | 表示n-m个 |
re模常用方法
1.e.match()
re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
函数语法:
re.match(pattern, string, flags=0)
函数参数说明:
参数 | 描述 |
---|---|
pattern | 匹配的正则表达式 |
string | 要匹配的字符串。 |
flags | 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见上方可选标志表格 |
1 | import re |
2.re.search()
re.search 扫描整个字符串并返回第一个成功的匹配。
函数语法:
re.search(pattern, string, flags=0)
函数参数说明:
参数 | 描述 |
---|---|
pattern | 匹配的正则表达式 |
string | 要匹配的字符串。 |
flags | 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见上方可选标志表格 |
1 | import re |
3.compile()
re.compile 用于编译正则表达式,生成一个正则表达式( Pattern )对象,re函数使用。
提前编译可减少多次正则匹配的运行时间
语法格式为:
re.compile(pattern[, flags])
函数参数说明:
参数 | 描述 |
---|---|
pattern | 匹配的正则表达式 |
flags | 可选,表示匹配模式 |
4.re.findall()
re.findall() 在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
注意: match 和 search 是匹配一次 findall 匹配所有。
函数参数说明:
参数 | 描述 |
---|---|
pattern | 正则表达式 |
string | 待匹配的字符串 |
flags | re的一些flag,可不写 |
1 | import re |
5.re.sub()
Python 的re模块提供了re.sub用于替换字符串中的匹配项。
语法:
re.sub(pattern, repl, string, count=0, flags=0)
匹配对象方法 | 描述 |
---|---|
pattern | 正则中的模式字符串。 |
repl | 替换的字符串,也可为一个函数。 |
string | 要被查找替换的原始字符串。 |
count | 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。 |
flags | 编译时用的匹配模式,数字形式。 |
1 | import re |
6.re.split()
re.split 方法按照能够匹配的子串将字符串分割后返回列表,它的使用形式如下:
re.split(pattern, string[, maxsplit=0, flags=0])
函数参数说明:
参数 | 描述 |
---|---|
pattern | 匹配的正则表达式 |
string | 要匹配的字符串。 |
maxsplit | 分隔次数,maxsplit=1 分隔一次,默认为 0,不限制次数。 |
flags | 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见上方可选标志表格 |
实例:
用正则表达式切分字符串比用固定的字符更灵活,请看正常的切分代码:
1 | 'a b c'.split(' ') |
贪婪匹配
需要特别指出的是,正则匹配默认是贪婪匹配,也就是匹配尽可能多的字符。举例如下,匹配出数字后面的0:
1 | match(r'^(\d+)(0*)$', '102300').groups() re. |
由于\d+采用贪婪匹配,直接把后面的0全部匹配了,结果0*只能匹配空字符串了。
必须让\d+采用非贪婪匹配(也就是尽可能少匹配),才能把后面的0匹配出来,加个?就可以让\d+采用非贪婪匹配:
1 | match(r'^(\d+?)(0*)$', '102300').groups() re. |
正则表达式修饰符
正则表达式可以包含一些可选标志修饰符来控制匹配的模式。修饰符被指定为一个可选的标志。多个标志可以通过按位 OR(|) 它们来指定。如 re.I | re.M 被设置成 I 和 M 标志:
re.I | 使匹配对大小写不敏感 |
---|---|
re.M | 多行匹配,影响 ^ 和 $ |
例子
1.两个特殊的符号’^‘和’$’。他们的作用是分别指出一个字符串的开始和结束
1 | "^The":表示所有以"The"开始的字符串("There","The cat"等); |
也可以在方括号里用’^’表示不希望出现的字符,’^’应在方括号里的第一位。
如:”%[^a-zA-Z]%”表示两个百分号中不应该出现字母。
- ‘’,’+’和’?’这三个符号,表示一个或一序列字符重复出现的次数。它们分别表示“没有或更多”,“一次或更多”还有“没有或一次”。
1 | "ab":表示一个字符串有一个a后面跟着零个或若干个b。("a", "ab", "abbb",……); |
3.’|’,表示“或”操作:
1 | "hi|hello":表示一个字符串里有"hi"或者"hello"; |
4.’.’可以替代任何字符:
1 | "a.[0-9]":表示一个字符串有一个"a"后面跟着一个任意字符和一个数字; |
5.实例讲解
1 | //校验是否全由数字组成 |