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.youkuaiyun.com/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拼接路径

本教程涵盖Python基础知识,包括关键字、模块导入、数据类型、运算符、控制流程、容器类型、字符串处理、函数、类与对象、异常处理、内置模块、文件操作、图形界面、网络通信和数据库操作。深入探讨了面向对象编程的封装、继承和多态特性,以及SQLite数据库的使用。同时,介绍了正则表达式、文件读写、图形用户界面(wxPython)和网络通信(HTTP/HTTPS、urllib)。此外,还涵盖了多线程、异常处理、日期时间模块(datetime)和常用内置模块(如math和os)等内容。

被折叠的 条评论
为什么被折叠?



