python学习记录
- 1.关键字
- 2导入模块
- 3.数据类型
- 4.数据据类型的转换
- 5.运算符
- 6. 程序流程控制
- 7.容器类型数据
- 8.字符串
- 9.函数
- 10.类与对象
- 11.异常处理
- 12.常用内置模块
- 13.文件读写
- 14.图形用户界面
- 15.网络通信
- 16.访问数据库
- 17. 多线程
- 18. python常用模块使用
1.关键字
2导入模块
2.1 导入模块练习
3.数据类型
3-1 数字
3-1-1.整形–int
3-1-2.浮点型–float
3-1-3.复数类型–complex
在计算机中用a+bj来表示复数。
复数相加
3-1-4. 布尔类型–bool( True &False)
1. 布尔类型属于整数类型,属于证书类型的子类。
2. 0和1不能表示bool类型。
4.数据据类型的转换
4.1隐式类型转换
4.2显式类型转换
5.运算符
5.1算数运算符
5.2比较运算符
5.3逻辑运算符
5.4位运算符
x&y 相同位都是1则为1,有一个是0则为0。
x|y 相同位有一个是1则为1。
5.4.1按位取反
5.5赋值运算符
5.6运算符优先级
6. 程序流程控制
6.1分支语句
6.1.1 if结构
6.1.2if-else 结构
6.1.3 if-elif-else
6.2循环语句
6.2.1 while 循环
6.2.2 for循环
6.3跳转语句
6.3.1 break语句
6.3.2continue语句
7.容器类型数据
7.1序列–sequence
7.1.1序列的索引操作
7.1.2加和乘的操作
7.1.3切片操作
7.1.4成员测试
7.2列表
**
列表内可存放不同类型的数据
**
7.2.1列表的创建
两种方式
7.2.2 追加元素
追加单个元素 list.append()
追加多个元素:
(1)list=list+t
(2) list.extend(t)
7.2.3插入元素
insert(i,x)
i参数表示插入位置
x参数表示插入元素
7.2.4替换元素
7.2.5删除元素
存在两个相同元素,remove()方法删除的是第一个元素。
7.3元组
一个元组内可存放不同的数据类型
7.3.1创建元组–tuple
两种方式:
1.小括号创建,小括号可省略
2.tuple() 函数创建
t=1, //创建只有一个元素的元组
7.3.2 元组拆包
7.4集合–set
**
三点:
1.可迭代
2.无序
3.不包含重复元素
**
7.4.1创建集合
7.4.2修改集合
7.5字典–dict
7.5.1创建字典
7.5.2修改字典
字典增删改查
7.5.3访问字典视图
8.字符串
8.1字符串的表示方式
8.1.1普通字符串
常用转义符
8.1.2原始字符串
8.1.3长字符串
用三个单引号或三个双引号括起来,会保留原来排版的格式
8.2字符串与数字的互相转换
8.2.1将字符串转化为数字
8.2.2将数字转化为字符串
8.3格式化字符串
8.3.1占位符的使用
{} 就是占位符
8.3.2格式化控制符
在占位符中格式化控制符
8.4操作字符串
8.4.1字符串的查找
8.4.2字符串替换
将”空格“替换为”竖线“,指定count参数为2则前两个被替换。
8.4.3字符串分割
使用”空格“分割字符串,返回值为一个list列表,maxsplit指定分割次数,默认全部分割。
9.函数
9.1函数的定义
9.2调用函数
9.2.1使用位置参数调用函数
9.2.2使用关键字参数调用函数
9.3参数的默认值
python中无函数的重载,存在为函数指定默认参数。
9.4可变参数
9.4.1基于元组的可变参数(*可变参数)
9.4.2基于字典的可变参数(**可变参数)
9.5函数中变量的作用域
1.此时输出的全部为全局变量的20
2.此时函数中输出的为10,全局变量输出的为20。
3.关键字global将函数中局部变量X升级成同名的全局变量,此时全输出为10。
9.6函数类型
9.6.1理解函数类型
9.6.2过滤函数filter()
filter第一个参数是函数类型(提供过滤规则),第二个参数是可迭代对象。
filter()函数返回值是一个可迭代对象,此处将其转换为列表。
9.6.3映射函数map()
map()函数返回值是一个可迭代对象,此处将其转化为列表。
9.7lambda函数(匿名函数)
lambda函数中“:”后函数体只能写一行,若想写多行课将其他内容封装成函数在此调用
10.类与对象
10.1面向对象
10.2 定义类
此处pass保证代码完整性,实际开发中类有主体不用加pass。
“(object)”可以省略,默认继承object类。
10.3创建对象
10.4类的成员
a、全局变量:在模块内、在所有函数外面、在class外面,这就是全局变量。
b、局部变量:在函数内、在class的方法内(未加self修饰的),这就是局部变量。
c、 静态变量:在class内的,但不在class的方法内的,这就是静态变量。
d、 实例变量:在class的方法内的,用self修饰的变量,这就是实例变量。
实例变量:属于某个具体的类(类实例化后生成的对象)的变量。
类变量:属于类的变量。
类变量是指一个类的变量,通常为静态变量,而实例变量通常是动态的 类变量和实例变量的区别在于:类变量是所有对象共有,其中一个对象将它值改变,其他对象得到的就是改变后的结果;而实例变量则属对象私有,某一个对象将其值改变,不影响其他对象。
实例方法:属于类实例化后具体对象的方法。
类方法:属于类本身的方法。
10.4.1实例变量
self表示当前对象,即类实例化的每个实例本身。
对象实例化时,调用构造方法将类名后括号内的参数传给每个实例的属行(self.name),self.name中的name就是实例变量。
10.4.2构造方法
python不同于java,python不需要在类中专门声明成员变量,在构造方法中定义成员变量。例:self.name。
10.4.3实例方法
1. 实例方法调用时通过对象名.方法名来调用。
2. 类的内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self,且为第一个参数,self 代表的是类的实例。self 的名字并不是规定死的,也可以使用 this,但是最好还是按照约定使用 self。
3. 构造方法也是一种实例方法。
10.4.4类变量
此处利率为类变量,不特属于单个实例。
类变量位于构造方法之外。
类变量同过类名.类变量来调用。
10.4.5类方法
类方法的定义需要在方法名上加装饰器@classmethod
cls表示当前类,类似于self。
当前类cls调用类变量interest_fate。
10.5封装性(封装、继承、多态面向对现象三大特性)
10.5.1私有变量
1.成员变量前加两个下划线_ _声明成为私有变量。
2.实例变量和类变量都可以声明成私有变量
3.私有变量只能在类的内部访问,类的实例化对象在类外部不可访问。
10.5.2私有方法
10.5.3使用属性(借此来简化get&set方法)
1.在类中声明set和get方法。
2.在类外通过对象来调用set和get方法访问类中的私有成员变量。
此方式类似java中的get和set方法的定义,但是一个私有的成员变量需要定义两个公有的方法(get&set方法)来访问它,比较麻烦所以python定义属性来简化这一操作。
10.5.3.1 python中属性的使用(get&set方法的定义和使用)
定义
使用
10.6继承性(面向对象的三大特性:封装、继承、多态)
10.6.1python中的继承
10.6.2多继承(一个子类继承多个父类)
很多语言不支持多继承,例如java,但python支持。
若子类继承的多个父类有同名方法,继承顺序:从左到右。
10.6.3方法重写
子类中根据子类需要重写重写父类的方法。
10.7多态性(面向对象的三大特性:封装、继承、多态)
python属于动态类型语言,实现多态比较复杂。
10.7.1继承与多态
10.7.2鸭子类型测试与多态
1.动态类型语言都支持鸭子类型测试,例如python,静态类型语言不支持鸭子类型测试,例如java。
2.python通过鸭子类型测试来实现广泛的多态,不只局限于子类和父类之间,不同的类之间也可实现多态,只要这些类之间有相同的方法。
不同的类之间实现多态测试:
运行输出:
11.异常处理
11.1第一个异常–除零异常
11.2捕获异常
11.2.1 try-except语句
[异常类型]可省,省略后默认捕获所有异常。
as e :将捕获的异常赋予变量e。
11.2.2多个except代码块
除零异常:
非数字异常:
11.2.3多重异常捕获
11.2.4 try-except 语句嵌套
并不是所有异常都能嵌套,所嵌套的异常要具有一定包含关系。
11.3使用finally代码块释放资源
不论发不发生异常都会经过finally代码块。
正常结束:
发生异常结束:
11.4自定义异常类
1.写一个自定义的异常类,继承自python官方异常类Exception。
2.写构造方法也要继承exception的构造方法。
11.5 手动引发异常
有点问题,先记录一下!
12.常用内置模块
12.1数学计算模块–math
使用前应先导入math模块
12.2日期时间模块–datetime
12.2.1datetime类
datetime.datetime(参数)创建了一个时间对象。
12.2.1.1datetime类的常用方法
12.2.2date类
date类只能表示日期。
12.2.3 time类
12.2.4计算时间跨度类 timedelta
参数表示间隔的时间。
12.2.5将日期时间与字符串相互转换
简记:
strftime()—string format time 将时间对象转化为字符串
dateptime()–date pass time 将字符串类型日期转化为时间对象
12.3正则表达式模块-re
12.3.1正则表达式的字符串匹配
\w:匹配任何字符
+:字符数量>=1
\.:表示 .
12.3.2正则表达式字符串查找
span(16,45)表示找到的第一个字符串的下标。
12.3.3字符串替换
12.3.4字符串分割
13.文件读写
13.1 文件打开
文件打开模式
常用进行组合
三种文件路径的表示
13.2关闭文件
13.2.1 在finally代码块中关闭文件
OSError和操作系统相关的异常。
13.2.2在with as 代码块中关闭文件(推荐写法)
13.3 读写文本文件
文件内的内容可以是ASCII码的,这种文件我们往往直接可以阅读,叫文本文件。
flush() 为提高写入效率、减少IO操作次数,每次写文件并不是将数据真正写入文件中,而是先写到缓冲区中,文件关闭时会自动刷新缓冲区将缓冲区内容写入文件,flush()强制刷新缓冲区,在文件未关闭时将缓冲区内容写入文件。
13.4 复制文本文件
13.5 读写二进制文件
有的文件(如程序、视频、图片、或一些电子书等等),计算机是直接用二进制的0和1记录的,我们无法直接阅读。甚至根本无法读。这种文件叫二进制文件。
13.6复制二进制文件
14.图形用户界面
14.1Python中的图形用户界面开发库
wxPython比Tkinter强大,比PyQt操作简便,这里学习wxPython。
14.2 安装wxPython
14.3第一个wxPython程序
wx.app()是模块导入的用法,详情在#2。
import wx引入wxPython模块失败问题处理
我用Pycharm输入以上代码,在已经安装wxpython请境况下,import wx引入模块失败,于是重新安装了下就可正常使用了,如下。
14.4 自定义窗口类
自定义窗口类,以便功能扩展。
14.5 在窗口中添加控件
面板panel中可放面板,可放控件。
panel中的parent=self,表示父容器为MyFram对象.
14.6 事件处理
EVT_BUTTON是常量,表示此为wx一个按钮类型。
14.7布局管理
14.7.1 盒子布局管理器
14.7.1.1创建盒子布局管理器对象
14.7.1.2添加子窗口(或控件)到父窗口
window 表示子窗口,盒子布局管理器所属哪个容器。
proportion 表示权重。
flag 标志,下文介绍。
border 如果在flag中指定有边框,可通过此标签设置边框宽度。
flag对齐标志
flag边框标志
flag调整尺寸标志
14.7.2重构事件处理示例
14.7.3盒子布局管理器嵌套示例
button1和button2水平布局。
button1、button2和单击按钮垂直布局。
14.8控件
wxPython的所有控件都继承自wx.Control类。之前的示例已经使用了静态文本和按钮,本节重点介绍文本输入控件、单选按钮、复选框、列表和静态图片控件。
14.8.1文本输入控件
文本输入控件(wx.TextCtrl)是可以输入文本的控件。
14.8.2复选框和单选按钮
多选控件是复选框(wx.CheckBox),复选框(wx.CheckBox)有时也能单独使用,能提供两种状态的开和关。
单选控件是单选按钮(wx.RadioButton),同一组的多个单选按钮应该具有互斥性,就是当一个按钮按下时,其他按钮一定释放。
指定为wx.RB_GROUP一个组后两个radio互斥。
14.8.3列表
对列表控件可以进行单选或多选,列表控件类是wx.ListBox。
wx.LB_SINGLE:单选。
wx.LB_MULTIPLE:多选。
wx.LB_EXTENDED:多选,但是需要在按住Ctrl或Shift键时选择项目。
wx.LB_SORT:对列表选择项进行排序。
14.8.4 静态图片控件
静态图片控件用于显示一张图片,图片可以是wx.Python所支持的任意图片格式,静态图片控件类是wx.StaticBitmap。
14.9如何使用wxPython官方文档
1 打开wxPython官网页面。
2 打开官方API帮助文档。
3 使用API帮助文档。
15.网络通信
15.1基本的网络知识
15.1.1 TCP/IP协议
15.1.2IP地址
15.1.3端口
15.1.4 HTTP/HTTPS协议
对互联网的访问大多基于HTTP/HTTPS,HTTP/HTTPS是TCP/IP的一种协议。
1 HTTP
HTTP(Hypertext Transfer Protocol,超文本传输协议)属于应用层协议,其简捷、快速的方式适用于分布式超文本信息传输。HTTP是无连接协议,即在每一次请求时都建立连接,服务器在处理完客户端的请求后,会先应答客户端,然后断开连接,不会一直占用网络资源。
HTTP/1.1共定义了8种请求方法:OPTIONS、HEAD、GET、POST、PUT、DELETE、TRACE和CONNECT。GET和POST方法最常用。
2 HTTPS
HTTPS(Hypertext Transfer Protocol Secure,超文本传输安全协议)是超文本传输协议和SSL的组合,用于提供加密通信及对网络服务器身份的鉴定。简单地说,HTTPS是加密的HTTP。
HTTPS与HTTP的区别是:HTTPS使用https://代替http://,HTTPS使用端口443,而HTTP使用端口80与TCP/IP通信。
1) GET方法:用于向指定的资源发出请求,被发送的信息“显式”地跟在URL后面。它一般只用于读取数据,例如静态图片等。GET方法有点像使用明信片给别人写信,将“信的内容”写在外面,接触到的人都可以看到,因此是不安全的。
2) POST方法:用于向指定的资源提交数据,请求服务器进行处理,例如提交表单或者上传文件等。数据被包含在请求体中。POST方法像是把“信的内容”装入信封中,接触到该信封的人都看不到信的内容,因此是相对安全的。
15.2 搭建web服务器
1.下载tomcat
tomcat官网 https://tomcat.apache.org/
选择合适版本下载,此下载tomcat9。
2.解压
3.运行服务
将自己的代码放入webapps文件夹下,进入bin目录找到startup.bat双击运行。
启动成功。
打开浏览器,在地址栏中输入http://localhost:8080/后回车。
关闭tomcat双击
15.3urllib.request模块
15.3.1 发送GET请求
15.3.2 发送POST请求
15.4 JSON数据
15.4.1 JSON文档的结构
构成JSON文档的两种结构为:JSON对象(object)和JSON数组(array)。
Json的数据类型和python数据类型对比
15.4.2 JSON数据的解码
我们使用json模块提供的loads(str)函数进行JSON数据的解码,参数str是JSON字符串,返回Python数据。
15.5练习下载图片
注意:下载网络上的图片要找到网络上的图片地址,url拦上的有时不全是图片的url,因此会导致下载的图片打不开。
16.访问数据库
16.1 SQLite数据库
SQLite数据库和Oracle或MySQL数据库有什么不同
16.1.1SQLite数据库类型
SQLite是无数据类型的数据库,在创建表时不需要为字段指定数据类型。但从编程规范上讲,我们应该指定数据类型,因为数据类型可以表明这个字段的含义,便于我们阅读和理解代码。
SQLite支持的常见数据类型如下。
16.1.2 Python数据类型与SQLite数据类型的映射
在使用Python访问SQLite数据库时,会经常涉及数据类型的互相转换。它们的映射关系如下表所示。
16.1.3 使用GUI管理工具管理SQLite数据库
1 安装和启动DB Browser for SQLite
官网下载:http://www.sqlitebrowser.org/dl/
csdn资源下载:https://download.csdn.net/download/qq_37356556/20679425
下载后直接解压。
2 创建数据库、创建表
3.执行SQL语句
4.浏览数据
16.2 数据库编程的基本操作过程
数据库编程主要分为两类:查询(Read)和修改(C插入、U更新、D删除)。
1 查询数据
查询数据时需要6步,在查询过程中需要提取数据结果集,最后释放资源,即关闭游标和数据库。
2 修改数据
修改数据时如上图所示,最多需要6步,在修改过程中如果执行SQL操作成功,则提交数据库事务;如果失败,则回滚事务。最后释放资源,关闭游标和数据库。
16.3 sqlite3模块API
Python官方提供了sqlite3模块来访问SQLite数据库。
16.3.1 数据库连接对象Connection
数据库访问的第一步是进行数据库连接。
我们可以通过connect(database)函数建立数据库连接,参数database是SQLite数据库的文件路径,如果连接成功,则返回数据库连接对象Connection。
Connection对象有如下重要的方法。
16.3.2 游标对象Cursor
一个Cursor游标对象表示一个数据库游标,游标暂时保存了SQL操作所影响到的数据。游标是通过数据库连接创建的。
一个游标对象简单理解为从数据库返回的数据集合,一个临时的表。
**execute(sql[,parameters]):**执行一条SQL语句,sql是SQL语句,parameters是为SQL提供的参数,可以是序列或字典类型。返回值是整数,表示执行SQL语句影响的行数。
**executemany(sql[,seq_of_params]):**执行批量SQL语句,sql是SQL语句,seq_of_params是为SQL提供的参数,seq_of_params是序列。返回值是整数,表示执行SQL语句影响的行数。
在通过execute()和executemany()方法执行SQL查询语句后,还要通过提取方法从查询结果集中返回数据,相关提取方法如下。
**fetchone():**从结果集中返回只有一条记录的序列,如果没有数据,则返回None。
**fetchmany(size=cursor.arraysize):**从结果集中返回小于等于size记录数的序列,如果没有数据,则返回空序列,size在默认情况下是整个游标的行数。
fetchall():从结果集中返回所有数据。
16.4SQLite数据库的CURD操作
对之前建立的数据库表student增加性别和生日字段。
16.4.1无条件查询
无条件查询最为简单,没有WHERE子句。
其中result_set的数据类型是列表类型:
16.4.2 有条件查询
有条件查询带有WHERE子句,WHERE子句是查询条件。
16.4.3 插入数据
数据插入操作SQL语句是INSERT。
数据插入成功,可以使用DB Browser for SQLite浏览数据。
16.4.4 更新数据
数据更新操作SQL语句是UPDATE。
16.4.5 删除数据
数据删除操作SQL语句是DELETE。
16.5 防止SQL注入攻击
17. 多线程
如果想让我们的程序同时执行多个任务,就需要使用多线程技术了。到目前为止,我们编写的程序都是单线程的,在运行时一次只能执行一个任务。
17.1 线程的相关知识
17.1.1 进程
一个进程就是一个正在执行的程序,每一个进程都有自己独立的一块内存空间、一组系统资源。在进程的概念中,每一个进程的内部数据和状态都是完全独立的。
在Windows操作系统中,一个进程就是一个exe或者dll程序,它们相互独立,相互也可以通信。
windows 中的进程
17.1.2 线程
在一个进程中可以包含多个线程,多个线程共享一块内存空间和一组系统资源。所以,系统在各个线程之间切换时,开销要比进程小得多,正因如此,线程被称为轻量级进程。
17.1.3 主线程
Python程序至少有一个线程,这就是主线程,程序在启动后由Python解释器负责创建主线程,在程序结束后由Python解释器负责停止主线程。
在多线程中,主线程负责其他线程的启动、挂起、停止等操作。其他线程被称为子线程。
17.2 线程模块——threading
Python官方提供的threading模块可以进行多线程编程。threading模块提供了多线程编程的高级API,使用起来比较简单。
在threading模块中提供了线程类Thread,还提供了很多线程相关的函数,这些函数中常用的如下。
运行输出:
17.3 创建子线程
17.3.1 自定义函数实现线程体
运行输出:
17.3.2 自定义线程类实现线程体
推荐两处改动更容易理解多线程的运行原理:
17.4 线程管理
17.4.1 等待线程结束
有时,一个线程(假设是主线程)需要等待另外一个线程(假设是t1子线程)执行结束才能继续执行。
join()方法用法
参数timeout用于设置超时时间,单位是秒。如果没有设置timeout,则可以一直等待,直到结束。
从运行结果来看,在子线程t1结束后,主线程才输出变量value的内容,这说明主线程被阻塞了。
如果尝试将t1.join()语句注释掉,则输出结果如下:
此时主线程未中途停止。
17.4.2 线程停止
运行示例:
17.5 下载图片示例
这个网络爬虫程序每隔一段时间都会执行一次下载图片任务,在下载任务完成后,休眠一段时间再执行。这样反复执行,直到爬虫程序停止。
示例参考代码如下:
以上所有课程来自b站:https://www.bilibili.com/video/BV1Fh411h7WM
18. python常用模块使用
18.1OS模块
(1)获取图片列表中每一个图片的名称
(2拼接路径