Python前端开发
1.前端三剑客(HTML,CSS和JavaScript)
1.1 HTML
1.1.1 HTML简介
HyperText Mark-up Language, 指的是超文本标记语言;
html是开发网页的语言;
html中的标签大多数都是成对出现的, 格式: <标签名></标签名>
1.1.2 HTML结构
第一行是文档声明部分
HTML:分为页头,页身和页脚。标签大部分是成对出现
1.1.3第一行文档声明部分HTML在vscode中的使用
vscode是由微软研发的一种代码编辑器;通过资源管理器打开可以创建html文档和编写HTML代码;可以根据需求安装插件
1.1.4常用的HTML标签初识
学习HTML语言就是学习标签的用法,常见的标签有20种;标签建议使用小写;
根据标签书写形式分为单标签和双标签;
单标签没有内容,双标签可以可以嵌套其他标签和承载文本内容
1.1.5资源路径
绝对路径和相对路径,一般使用相对路径;
相对路径是从当前操作的HTML文档所在,目录算起的路径;
绝对路径是从根目录算起的路径
1.1.6列表标签
列表标签有无序列表标签ul和有序列表标签ol
1.1.7表格标签
表格标签table、tr、th、td
1.1.8表单标签
表单标签是form标签
常用的表单标签有:lable、input、select
1.1.9表单提交
表单标签的作用就是可以把用户输入数据一起提交到web服务器
表单属性设置
action:是设置表单数据提交地址
method:是表单提交方式,提交方式有get,post
表单元素属性设置
name:表单元素的名称,用于作为提交表单数据时的参数名
value:表单元素的值,用于作为提交表单数据时参数名所代表的值
1.2 CSS
1.2.1 css简介
css 是层叠样式表,它是用来美化网页和控制页面布局
定义 css 的语法格式是: 选择器{样式规则}
1.2.2 css选择器
css 的引入有三种方式, 分别是行内式、内嵌式、外链式。
外链式是在公司开发的时候会使用,最能体现 div+css 的标签内容与显示样式分离的思想, 也最易改版维护,代码看起来也是最美观的一种。
1.2.3 css选择器
- css 选择器就是用来选择标签设置样式的
- 常用的 css 选择器有六种,分别是:
- 标签选择器
- 类选择器
- 层级选择器(后代选择器)
- id选择器
- 组选择器
- 伪类选择器
1.2.4 css属性
- 设置不同的样式属性会呈现不同网页的显示效果
- 样式属性的表现形式是: 属性名:属性值;
1.2.5 css 元素溢出
- overflow样式属性是设置子标签溢出的显示方式
- 常用使用**overflow:hidden;**来解决元素溢出
1.2.6 css显示特性
通常隐藏元素使用 display:none
1.2.7盒子模型
- 盒子模型的5个主要样式属性
- width:内容的宽度(不是盒子的宽度)
- height:内容的高度(不是盒子的高度)
- padding:内边距。
- border:边框。
- margin:外边距
- 盒子的真实尺寸只会受到宽度、高度、边框、内边距四个属性的影响,不会受到外边距属性的影响。
1.3 JavaScript
前端开发三大块 1、HTML:负责网页结构 2、CSS:负责网页样式 3、JavaScript:负责网页行为, 比如:网页与用户的交互效果
1.3.1 JavaScript简介
JavaScript是运行在浏览器端的脚步语言, 是由浏览器解释执行的, 简称js, 它能够让网页和用户有交互功能, 增加良好的用户体验效果。
JavaScript是运行在浏览器端的脚步语言,它的作用就是负责网页和用户的交互效果。
1.3.2 JavaScript的使用方式
- 行内式
- 内嵌式
- 外链式
1.3.3变量和数据类型
js中有六种数据类型,分别是:
- number
- string
- boolean
- undefined
- null
- object
1.3.4函数定义和调用
-
函数的定义
function 函数名(参数[参数可选]){ // 函数的代码实现 ... }
- 1
- 2
- 3
- 4
-
函数的调用
函数名(参数[参数可选])
- 1
1.3.5变量作用域
- 局部变量只能在函数内部使用
- 全局变量可以在不同函数内使用
1.3.6条件语句
条件语句三种写法
- if 语句 适用于单条件判断
- if else 语句 适用于两种条件的判断(成立和不成立条件判断)。
- if else if else 语句 适用于多条件判断
1.3.7获取标签元素
获取标签元素需要等待页面加载完成,使用document.getElementById(‘标签id’);
1.3.8操作标签元素属性
标签属性的获取和设置:
- var 标签对象 = document.getElementById(‘id名称’); -> 获取标签对象
- var 变量名 = 标签对象.属性名 -> 读取属性
- 标签对象.属性名 = 新属性值 -> 设置属性
1.3.9数组及操作方法
- 数组的定义使用一对中括号
- 获取数组的长度使用length属性
- 从数组最后添加元素使用push方法
- 从数组最后删除元素使用pop方法
- 根据下标添加和删除元素使用splice方法
1.3.10循环语句
js中循环语句有:
- for
- while
- do-while
1.3.11字符串拼接
“+” 运算符能够实现字符串的拼接操作
1.3.12定时器
- 定时器的创建
- 只执行一次函数的定时器, 对应的代码是setTimeout函数
- 反复执行函数的定时器, 对应的代码是setInterval函数
- 清除定时器
- 清除只执行一次函数的定时器, 对应的代码是clearTimeout函数
- 清除清除反复执行的定时器, 对应的代码是clearInterval函数
1.4 jQuery
1.4.1 jQuery简介
- jQuery是一个免费、开源的JavaScript函数库
- jQuery的作用和JavaScript一样,都是负责网页和用户的交互效果。
- jQuery的优点就是兼容主流浏览器,代码编写更加简单。
1.4.2 jQuery用法
-
引入jQuery
-
获取标签元素需要在入口函数来完成,它的速度比原生的 window.onload 更快
-
jQuery入口函数有两种写法:
// 完整写法 $(document).ready(function(){ ... }); // 简化写法 $(function(){ ... });
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
1.4.3 jQuery选择器
- jQuery选择器就是选择标签的
- 标签选择器是根据标签名来选择标签
- 类选择器是根据类名来选择标签
- id选择器是根据id来选择标签
- 层级选择器是根据层级关系来选择标签
- 属性选择器是根据属性名来选择标签
1.4.4选择集过滤
- 选择集过滤可以使用has方法和eq方法来完成
- jquery给标签设置样式使用css方法
1.4.5选择集转移
- prev() 表示获取上一个同级元素
- prevAll() 表示获取上面所有同级元素
- next() 表示获取下一个同级元素
- nextAll() 表示获取下面所有同级元素
- parent() 表示获取父元素
- children() 表示获取所有的子元素
- siblings() 表示获取其它同级元素
- find(“选择器名称”) 表示获取指定选择器的元素
1.4.6获取和设置元素内容
- 获取和设置元素的内容使用: html方法
- 给指定元素追加html内容使用: append方法
1.4.7获取和设置元素属性
- 获取和设置元素属性的操作可以通过prop方法来完成
- 获取和设置元素的value属性可以通过val方法来完成,更加简单和方便
1.4.8 jQuery事件
jQuery常用事件:
- click() 鼠标单击
- blur() 元素失去焦点
- focus() 元素获得焦点
- mouseover() 鼠标进入(进入子元素也触发)
- mouseout() 鼠标离开(离开子元素也触发)
- ready() DOM加载完成
1.4.9事件代理
- 事件代理就是使用父元素来代理子元素的事件,好处是减少事件的绑定次数,提高性能。
- 使用场景当多个相同的子元素绑定同一个事件,可以使用事件代理。
- 事件代理使用是使用delegate方法来完成
创建自定义javascript对象有两种方式:
- Object
- 字面量
1.4.10 jQuery对象
创建自定义javascript对象有两种方式:
- Object
- 字面量
1.4.11 json
- json就是一个javascript对象表示法,json本质上是一个字符串。
- json有两种格式:1. 对象格式, 2. 数组格式
1.4.12 Ajax
- ajax 是发送http请求获取后台服务器数据的技术
- ajax的简写方式可以使用
.
g
e
t
和
.get和
2. MySQL 数据库
2.1 MySQL数据库的基本使用
2.1.1数据库
- 数据库就是存储和管理数据的一个仓库,是用来持久化存储和快速读取数据的。
- 数据库可以分为关系型数据库和非关系型数据库
2.1.2关系型数据库管理系统
- 关系型数据库管理系统是一个软件,它可以管理不同的数据库,想要对数据库进行操作安装对应的关系型数据库管理系统软件即可。
- SQL的作用是实现数据库客户端和数据库服务端之间的通信,好比是通信桥梁。
2.1.3 MySQL数据库
- MySQL是一个关系型数据库管理系统
- 安装MySQL服务端软件使用: sudo apt-get install mysql-server
- 安装MySQL客户端软件使用: sudo apt-get install mysql-client
- 图形化MySQL客户端软件使用Navicat
2.1.4数据类型和约束
- 常用的数据类型:
- 整数:int,bit
- 小数:decimal
- 字符串:varchar,char
- 日期时间: date, time, datetime
- 枚举类型(enum)
- 常见的约束:
- 主键约束 primary key
- 非空约束 not null
- 惟一约束 unique
- 默认约束 default
- 外键约束 foreign key
- 数据类型和约束保证了表中数据的准确性和完整性
2.1.5图形化客户端Navicat
- Navicat 是一个数据库图形化客户端软件,对数据库、数据表以及表中数据提供了非常方便、简单的操作
- 在工作中为了提高开发效率往往会使用Navicat, 但是学习阶段为了夯实同学们的基础, 能够在面试和工作中在处理数据的时候得心应手, 我们使用命令行客户端的操作而不适用图形化工具。
2.1.6命令行客户端MySQL的使用
- 登录数据库: mysql -uroot -p
- 退出数据库: quit 或者 exit 或者 ctr + d
- 创建数据库: create database 数据库名 charset=utf8;
- 使用数据库: use 数据库名;
- 删除数据库: drop database 数据库名;
- 创建表: create table 表名(字段名 字段类型 约束, …);
- 修改表-添加字段: alter table 表名 add 字段名 字段类型 约束
- 修改表-修改字段类型: alter table 表名 modify 字段名 字段类型 约束
- 修改表-修改字段名和字段类型: alter table 表名 change 原字段名 新字段名 字段类型 约束
- 修改表-删除字段: alter table 表名 drop 字段名;
- 删除表: drop table 表名;
- 查询数据: select * from 表名; 或者 select 列1,列2,… from 表名;
- 插入数据: insert into 表名 values (…) 或者 insert into 表名 (列1,…) values(值1,…)
- 修改数据: update 表名 set 列1=值1,列2=值2… where 条件
- 删除数据: delete from 表名 where 条件
2.1.7 as和distinct关键字
- as 关键字可以给表中字段 或者 表名起别名
- distinct 关键字可以去除重复数据行。
2.1.8 where条件查询
- 常见的比较运算符有 >,<,>=,<=,!=
- 逻辑运算符and表示多个条件同时成立则为真,or表示多个条件有一个成立则为真,not表示对条件取反
- like和%结合使用表示任意多个任意字符,like和_结合使用表示一个任意字符
- between-and限制连续性范围 in限制非连续性范围
- 判断为空使用: is null
- 判断非空使用: is not null
2.1.9排序
- 序使用 order by 关键字
- asc 表示升序
- desc 表示降序
2.1.10分页查询
- 使用 limit 关键字可以限制数据显示数量,通过 limit 关键可以完成分页查询
- limit 关键字后面的第一个参数是开始行索引(默认是0,不写就是0),第二个参数是查询条数
2.2MySQL数据库的条件查询
2.2.1聚合函数
- count(col): 表示求指定列的总行数
- max(col): 表示求指定列的最大值
- min(col): 表示求指定列的最小值
- sum(col): 表示求指定列的和
- avg(col): 表示求指定列的平均值
2.2.2分组查询
- roup by 根据指定的一个或者多个字段对数据进行分组
- group_concat(字段名)函数是统计每个分组指定字段的信息集合
- 聚合函数在和 group by 结合使用时, 聚合函数统计和计算的是每个分组的数据
- having 是对分组数据进行条件过滤
- with rollup在最后记录后面新增一行,显示select查询时聚合函数的统计和计算结果
2.2.3连接查询–内连接
- 内连接使用inner join … on …, on 表示两个表的连接查询条件
- 内连接根据连接查询条件取出两个表的 “交集”
2.2.4连接查询–左查询
- 左连接使用left join … on …, on 表示两个表的连接查询条件
- 左连接以左表为主根据条件查询右表数据,右表数据不存在使用null值填充。
2.2.5连接查询–右连接
- 右连接使用right join … on …, on 表示两个表的连接查询条件
- 右连接以右表为主根据条件查询左表数据,左表数据不存在使用null值填充。
2.2.6连接查询–自连接
- 自连接查询就是把一张表模拟成左右两张表,然后进行连表查询。
- 自连接就是一种特殊的连接方式,连接的表还是本身这张表
2.2.7子查询
子查询是一个完整的SQL语句,子查询被嵌入到一对小括号里面
2.2.8数据库设计之三范式
- 范式就是设计数据库的一些通用规范。
- 1NF强调字段是最小单元,不可再分
- 2NF强调在1NF基础上必须要有主键和非主键字段必须完全依赖于主键,也就是说 不能部分依赖
- 3MF强调在2NF基础上 非主键字段必须直接依赖于主键,也就是说不能传递依赖(间接依赖)。
- E-R模型由 实体、属性、实体之间的关系构成,主要用来描述数据库中表结构。
- 开发流程是先画出E-R模型,然后根据三范式设计数据库中的表结构
2.2.9外键约束SQL语句的编写
- 添加外键约束: alter table 从表 add foreign key(外键字段) references 主表(主键字段);
- 删除外键约束: alter table 表名 drop foreign key 外键名;
2.2.10演练–分组和聚合函数的组合
-- 创建 "京东" 数据库
create database jing_dong charset=utf8;
-- 使用 "京东" 数据库
use jing_dong;
-- 创建一个商品goods数据表
create table goods(
id int unsigned primary key auto_increment not null,
name varchar(150) not null,
cate_name varchar(40) not null,
brand_name varchar(40) not null,
price decimal(10,3) not null default 0,
is_show bit not null default 1,
is_saleoff bit not null default 0
);
-- 向goods表中插入数据
insert into goods values(0,'r510vc 15.6英寸笔记本','笔记本','华硕','3399',default,default);
insert into goods values(0,'y400n 14.0英寸笔记本电脑','笔记本','联想','4999',default,default);
insert into goods values(0,'g150th 15.6英寸游戏本','游戏本','雷神','8499',default,default);
insert into goods values(0,'x550cc 15.6英寸笔记本','笔记本','华硕','2799',default,default);
insert into goods values(0,'x240 超极本','超级本','联想','4880',default,default);
insert into goods values(0,'u330p 13.3英寸超极本','超级本','联想','4299',default,default);
insert into goods values(0,'svp13226scb 触控超极本','超级本','索尼','7999',default,default);
insert into goods values(0,'ipad mini 7.9英寸平板电脑','平板电脑','苹果','1998',default,default);
insert into goods values(0,'ipad air 9.7英寸平板电脑','平板电脑','苹果','3388',default,default);
insert into goods values(0,'ipad mini 配备 retina 显示屏','平板电脑','苹果','2788',default,default);
insert into goods values(0,'ideacentre c340 20英寸一体电脑 ','台式机','联想','3499',default,default);
insert into goods values(0,'vostro 3800-r1206 台式电脑','台式机','戴尔','2899',default,default);
insert into goods values(0,'imac me086ch/a 21.5英寸一体电脑','台式机','苹果','9188',default,default);
insert into goods values(0,'at7-7414lp 台式电脑 linux )','台式机','宏碁','3699',default,default);
insert into goods values(0,'z220sff f4f06pa工作站','服务器/工作站','惠普','4288',default,default);
insert into goods values(0,'poweredge ii服务器','服务器/工作站','戴尔','5388',default,default);
insert into goods values(0,'mac pro专业级台式电脑','服务器/工作站','苹果','28888',default,default);
insert into goods values(0,'hmz-t3w 头戴显示设备','笔记本配件','索尼','6999',default,default);
insert into goods values(0,'商务双肩背包','笔记本配件','索尼','99',default,default);
insert into goods values(0,'x3250 m4机架式服务器','服务器/工作站','ibm','6888',default,default);
insert into goods values(0,'商务双肩背包','笔记本配件','索尼','99',default,default);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
表结构说明:
- id 表示主键 自增
- name 表示商品名称
- cate_name 表示分类名称
- brand_name 表示品牌名称
- price 表示价格
- is_show 表示是否显示
- is_saleoff 表示是否售完
2. SQL语句演练
-
查询类型cate_name为 ‘超极本’ 的商品名称、价格
select name,price from goods where cate_name = '超级本';
- 1
-
显示商品的分类
select cate_name from goods group by cate_name;
- 1
-
求所有电脑产品的平均价格,并且保留两位小数
select round(avg(price),2) as avg_price from goods;
- 1
-
显示每种商品的平均价格
select cate_name,avg(price) from goods group by cate_name;
- 1
-
查询每种类型的商品中 最贵、最便宜、平均价、数量
select cate_name,max(price),min(price),avg(price),count(*) from goods group by cate_name;
- 1
- 2
-
查询所有价格大于平均价格的商品,并且按价格降序排序
select id,name,price from goods where price > (select round(avg(price),2) as avg_price from goods) order by price desc;
- 1
- 2
- 3
2.3MySQL数据库的高级使用
2.3.1将查询结果插入到其它表
想要完成表复制可以使用: insert into … select … SQL语句
2.3.2使用连接更新表某个字段
连接更新表中数据使用: update … join … 语句
2.3.3创建表并给某个字段添加数据
创建表并给字段插入数据使用: create table … select 语句
2.3.4修改goods表结构
修改表结构可以使用: alter table 语句,多个修改字段之间使用逗号分隔
2.3.5 pymysql的使用
-
导包
import pymysql
- 1
-
创建连接对象
pymysql.connect(参数列表)
- 1
-
获取游标对象
cursor =conn.cursor()
- 1
-
执行SQL语句
row_count = cursor.execute(sql)
- 1
-
获取查询结果集
result = cursor.fetchall()
- 1
-
将修改操作提交到数据库
conn.commit()
- 1
-
回滚数据
conn.rollback()
- 1
-
关闭游标
cursor.close()
- 1
-
关闭连接
conn.close()
- 1
2.3.6事务
- 事务的特性:
- 原子性: 强调事务中的多个操作时一个整体
- 一致性: 强调数据库中不会保存不一致状态
- 隔离性: 强调数据库中事务之间相互不可见
- 持久性: 强调数据库能永久保存数据,一旦提交就不可撤销
- MySQL数据库默认采用自动提交(autocommit)模式, 也就是说修改数据(insert、update、delete)的操作会自动的触发事务,完成事务的提交或者回滚
- 开启事务使用 begin 或者 start transaction;
- 回滚事务使用 rollback;
- pymysql 里面的 conn.commit() 操作就是提交事务
- pymysql 里面的 conn.rollback() 操作就是回滚事务
2.3.7索引
- 索引是加快数据库的查询速度的一种手段
- 创建索引使用: alter table 表名 add index 索引名[可选] (字段名, xxx);
- 删除索引使用: alter table 表名 drop index 索引名;
3.闭包和装饰器
3.1闭包
-
当返回的内部函数使用了外部函数的变量就形成了闭包
-
闭包可以对外部函数的变量进行保存
-
实现闭包的标准格式:
# 外部函数 def test1(a): b = 10 # 内部函数 def test2(): # 内部函数使用了外部函数的变量或者参数 print(a, b) # 返回内部函数, 这里返回的内部函数就是闭包实例 return test2
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
3.2闭包的使用
闭包不仅可以保存外部函数的变量还可以提高代码的可重用行。
3.3修改闭包内使用的外部变量
修改闭包内使用的外部函数变量使用 nonlocal 关键字来完成
3.4装饰器
-
装饰器本质上就是一个闭包函数,它可以对已有函数进行额外的功能扩展。
-
装饰器的语法格式:
# 装饰器 # def decorator(fn): # fn:被装饰的目标函数. # def inner(): # '''执行函数之前''' # fn() # 执行被装饰的目标函数 # '''执行函数之后''' # return inner
- 1
- 2
- 3
- 4
- 5
- 6
- 7
-
装饰器的语法糖用法: @装饰器名称,同样可以完成对已有函数的装饰操作。
3.5装饰器的使用
在不改变已有函数源代码及调用方式的前提下,对已有函数进行功能的扩展
3.6通用装饰器的使用
通用装饰器的语法格式:
# 通用装饰器
def logging(fn):
def inner(*args, **kwargs):
print("--正在努力计算--")
result = fn(*args, **kwargs)
return result
return inner
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
3.7多个装饰器的使用
多个装饰器可以对函数进行多个功能的装饰,装饰顺序是由内到外的进行装饰
3.8带有参数的装饰器
使用带有参数的装饰器,其实是在装饰器外面又包裹了一个函数,使用该函数接收参数,返回是装饰器,因为 @ 符号需要配合装饰器实例使用
3.9类装饰器的使用
- 想要让类的实例对象能够像函数一样进行调用,需要在类里面使用call方法,把类的实例变成可调用对象(callable)
- 类装饰器装饰函数功能在call方法里面进行添加
4. mini_web框架
4.1 web框架概述
- web框架是专门为web服务器处理动态资源请求的一个应用程序
- web框架和web服务器的关系是web框架专门服务于web服务器,给web服务器提供处理动态资源请求的服务。
4.2框架程序开发
- 动态资源的判断通过请求资源路径的后缀是.html来完成,否则是静态资源
- 处理客户端的动态资源请求
- 接收web服务器的动态资源请求
- 处理动态资源请求并把处理结果返回给web服务器
- web服务器把处理结果组装成响应报文发送给浏览器
4.3模板替换功能开发
- 打开template目录下的index.html模板文件,读取模板文件数据
- 把模板文件中的模板变量进行替换
4.4路由列表功能开发
- 路由是请求的URL到处理函数的映射
- 路由列表是用来保存每一个设置好的路由
- 用户的动态资源请求通过遍历路由列表找到对应的处理函数来完成。
4.5装饰器方式的添加路由
使用带有参数的装饰器对处理函数进行装饰,并完成路由的添加功能
4.6显示股票信息页面好开发
- 根据sql语句查询股票信息
- 使用查询数据替换模板变量
4.7个人中心数据接口的开发
web框架程序还可以开发数据接口,为客户端程序提供数据服务。
-
- 根据sql语句查询数据库
-
- 把数据转成json字符串返回
-
- 浏览器通过指定接口地址获取web框架提供的数据。
4.8 Ajax请求数据渲染中心实现
- 根据用户请求返回个人中心空模板文件数据
- 在个人中心模板文件添加ajax请求获取个人中心数据
- 将个人中心数据在页面完成展示
4.9 logging日志
- 记录python程序中日志信息使用 logging 包来完成
- logging日志等级有5个:
- DEBUG
- INFO
- WARNING
- ERROR
- CRITICAL
- 打印(记录)日志的函数有5个:
- logging.debug函数, 表示: 打印(记录)DEBUG级别的日志信息
- logging.info函数, 表示: 打印(记录)INFO级别的日志信息
- logging.warning函数, 表示: 打印(记录)WARNING级别的日志信息
- logging.error函数, 表示: 打印(记录)ERROR级别的日志信息
- logging.critical函数, 表示: 打印(记录)CRITICAL级别的日志信息
5. 正则表达式
5.1 property属性
- 定义property属性有两种方式:
- 装饰器方式
- 类属性方式
- 装饰器方式:
- @property 修饰获取值的方法
- @方法名.setter 修饰设置值的方法
- 类属性方式:
- 类属性 = property(获取值方法, 设置值方法)
5.2 with语句和上下文管理器
- Python 提供了 with 语句用于简化资源释放的操作,使用 with 语句操作建立在上下文管理器(实现
__enter__和__exit__
)的基础上 - Python 还提供了一个 @contextmanager 装饰器,更进一步简化上下管理器的实现,让一个函数可以成为上下文管理器,结合 with 语句来使用
5.3生成器的创建方式
- 生成器是根据算法生成数据的一种机制,每次调用生成器只生成一个值,可以节省大量内存。
- 生成器的创建有两种方式:
-
- 生成器推导式
-
- yield 关键字
-
5.4深拷贝和浅拷贝
- 浅拷贝使用copy.copy函数
- 深拷贝使用copy.deepcopy函数
- 不管是给对象进行深拷贝还是浅拷贝,只要拷贝成功就会开辟新的内存空间存储拷贝的对象。
- 浅拷贝和深拷贝的区别是:
- 浅拷贝最多拷贝对象的一层,深拷贝可能拷贝对象的多层。
5.5正则表达式概述
正则表达式是匹配符合某些规则的字符串数据
5.6 re模块介绍
re.match() 根据正则表达式从头开始匹配字符串数据
5.7匹配单个字符
- . 表示匹配任意1个字符(除了\n)
- 表示匹配[ ]中列举的1个字符
- \d 表示匹配一个数字,即0-9
- \D 表示匹配一个非数字,即不是数字
- \s 表示匹配一个空白字符,即 空格,tab键
- \S | 匹配一个非空白字符
- \w | 匹配一个非特殊字符,即a-z、A-Z、0-9、_、汉字
- \W | 匹配一个特殊字符,即非字母、非数字、非汉字
5.8匹配多个字符
- *表示匹配前一个字符出现0次或者无限次,即可有可无
- +表示匹配前一个字符出现1次或者无限次,即至少有1次
- ?表示匹配前一个字符出现1次或者0次,即要么有1次,要么没有
- {m}表示匹配前一个字符出现m次
- {m,n}表示匹配前一个字符出现从m到n次
5.9匹配开头和结尾
- ^ 表示匹配字符串开头
- $ 表示匹配字符串结尾
5.10匹配分组
- | 表示匹配左右任意一个表达式
- (ab) 表示将括号中字符作为一个分组
\num
表示引用分组num匹配到的字符串(?P<name>)
表示分组起别名- (?P=name) 表示引用别名为name分组匹配到的字符串
- (分组数据):分组数是从左到右的方式进行分配的,最左边的是第一个分组,依次类推