1. 布尔类型属于整数类型,属于证书类型的子类。
2. 0和1不能表示bool类型。
x&y 相同位都是1则为1,有一个是0则为0。
x|y 相同位有一个是1则为1。
列表内可存放不同类型的数据
**
追加单个元素 list.append()
追加多个元素:
(1)list=list+t
(2) list.extend(t)
insert(i,x)
i参数表示插入位置
x参数表示插入元素
一个元组内可存放不同的数据类型
两种方式:
1.小括号创建,小括号可省略
2.tuple() 函数创建
t=1, //创建只有一个元素的元组
三点:
1.可迭代
2.无序
3.不包含重复元素
**
常用转义符
用三个单引号或三个双引号括起来,会保留原来排版的格式
{} 就是占位符
在占位符中格式化控制符
将”空格“替换为”竖线“,指定count参数为2则前两个被替换。
使用”空格“分割字符串,返回值为一个list列表,maxsplit指定分割次数,默认全部分割。
2.此时函数中输出的为10,全局变量输出的为20。
3.关键字global将函数中局部变量X升级成同名的全局变量,此时全输出为10。
filter第一个参数是函数类型(提供过滤规则),第二个参数是可迭代对象。
filter()函数返回值是一个可迭代对象,此处将其转换为列表。
lambda函数中“:”后函数体只能写一行,若想写多行课将其他内容封装成函数在此调用
此处pass保证代码完整性,实际开发中类有主体不用加pass。
“(object)”可以省略,默认继承object类。
a、全局变量:在模块内、在所有函数外面、在class外面,这就是全局变量。
b、局部变量:在函数内、在class的方法内(未加self修饰的),这就是局部变量。
c、 静态变量:在class内的,但不在class的方法内的,这就是静态变量。
d、 实例变量:在class的方法内的,用self修饰的变量,这就是实例变量。
实例变量:属于某个具体的类(类实例化后生成的对象)的变量。
类变量:属于类的变量。
类变量是指一个类的变量,通常为静态变量,而实例变量通常是动态的 类变量和实例变量的区别在于:类变量是所有对象共有,其中一个对象将它值改变,其他对象得到的就是改变后的结果;而实例变量则属对象私有,某一个对象将其值改变,不影响其他对象。
实例方法:属于类实例化后具体对象的方法。
类方法:属于类本身的方法。
self表示当前对象,即类实例化的每个实例本身。
对象实例化时,调用构造方法将类名后括号内的参数传给每个实例的属行(self.name),self.name中的name就是实例变量。
python不同于java,python不需要在类中专门声明成员变量,在构造方法中定义成员变量。例:self.name。
1. 实例方法调用时通过对象名.方法名来调用。
2. 类的内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self,且为第一个参数,self 代表的是类的实例。self 的名字并不是规定死的,也可以使用 this,但是最好还是按照约定使用 self。
3. 构造方法也是一种实例方法。
此处利率为类变量,不特属于单个实例。
类变量位于构造方法之外。
类变量同过类名.类变量来调用。
类方法的定义需要在方法名上加装饰器@classmethod
cls表示当前类,类似于self。
当前类cls调用类变量interest_fate。
1.成员变量前加两个下划线_ _声明成为私有变量。
2.实例变量和类变量都可以声明成私有变量
3.私有变量只能在类的内部访问,类的实例化对象在类外部不可访问。
1.在类中声明set和get方法。
2.在类外通过对象来调用set和get方法访问类中的私有成员变量。
此方式类似java中的get和set方法的定义,但是一个私有的成员变量需要定义两个公有的方法(get&set方法)来访问它,比较麻烦所以python定义属性来简化这一操作。
若子类继承的多个父类有同名方法,继承顺序:从左到右。
1.动态类型语言都支持鸭子类型测试,例如python,静态类型语言不支持鸭子类型测试,例如java。
2.python通过鸭子类型测试来实现广泛的多态,不只局限于子类和父类之间,不同的类之间也可实现多态,只要这些类之间有相同的方法。
不同的类之间实现多态测试:
运行输出:
[异常类型]可省,省略后默认捕获所有异常。
as e :将捕获的异常赋予变量e。
1.写一个自定义的异常类,继承自python官方异常类Exception。
2.写构造方法也要继承exception的构造方法。
datetime.datetime(参数)创建了一个时间对象。
简记:
strftime()—string format time 将时间对象转化为字符串
dateptime()–date pass time 将字符串类型日期转化为时间对象
文件内的内容可以是ASCII码的,这种文件我们往往直接可以阅读,叫文本文件。
flush() 为提高写入效率、减少IO操作次数,每次写文件并不是将数据真正写入文件中,而是先写到缓冲区中,文件关闭时会自动刷新缓冲区将缓冲区内容写入文件,flush()强制刷新缓冲区,在文件未关闭时将缓冲区内容写入文件。
有的文件(如程序、视频、图片、或一些电子书等等),计算机是直接用二进制的0和1记录的,我们无法直接阅读。甚至根本无法读。这种文件叫二进制文件。
wxPython比Tkinter强大,比PyQt操作简便,这里学习wxPython。
我用Pycharm输入以上代码,在已经安装wxpython请境况下,import wx引入模块失败,于是重新安装了下就可正常使用了,如下。
面板panel中可放面板,可放控件。
panel中的parent=self,表示父容器为MyFram对象.
window 表示子窗口,盒子布局管理器所属哪个容器。
proportion 表示权重。
flag 标志,下文介绍。
border 如果在flag中指定有边框,可通过此标签设置边框宽度。
button1和button2水平布局。
button1、button2和单击按钮垂直布局。
wxPython的所有控件都继承自wx.Control类。之前的示例已经使用了静态文本和按钮,本节重点介绍文本输入控件、单选按钮、复选框、列表和静态图片控件。
文本输入控件(wx.TextCtrl)是可以输入文本的控件。
多选控件是复选框(wx.CheckBox),复选框(wx.CheckBox)有时也能单独使用,能提供两种状态的开和关。
单选控件是单选按钮(wx.RadioButton),同一组的多个单选按钮应该具有互斥性,就是当一个按钮按下时,其他按钮一定释放。
对列表控件可以进行单选或多选,列表控件类是wx.ListBox。
wx.LB_SINGLE:单选。
wx.LB_MULTIPLE:多选。
wx.LB_EXTENDED:多选,但是需要在按住Ctrl或Shift键时选择项目。
wx.LB_SORT:对列表选择项进行排序。
静态图片控件用于显示一张图片,图片可以是wx.Python所支持的任意图片格式,静态图片控件类是wx.StaticBitmap。
1 打开wxPython官网页面。
2 打开官方API帮助文档。
3 使用API帮助文档。
对互联网的访问大多基于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方法像是把“信的内容”装入信封中,接触到该信封的人都看不到信的内容,因此是相对安全的。
1.下载tomcat
tomcat官网 https://tomcat.apache.org/
选择合适版本下载,此下载tomcat9。
2.解压
3.运行服务
将自己的代码放入webapps文件夹下,进入bin目录找到startup.bat双击运行。
启动成功。
打开浏览器,在地址栏中输入http://localhost:8080/后回车。
关闭tomcat双击
构成JSON文档的两种结构为:JSON对象(object)和JSON数组(array)。
我们使用json模块提供的loads(str)函数进行JSON数据的解码,参数str是JSON字符串,返回Python数据。
注意:下载网络上的图片要找到网络上的图片地址,url拦上的有时不全是图片的url,因此会导致下载的图片打不开。
SQLite是无数据类型的数据库,在创建表时不需要为字段指定数据类型。但从编程规范上讲,我们应该指定数据类型,因为数据类型可以表明这个字段的含义,便于我们阅读和理解代码。
SQLite支持的常见数据类型如下。
在使用Python访问SQLite数据库时,会经常涉及数据类型的互相转换。它们的映射关系如下表所示。
1 安装和启动DB Browser for SQLite
官网下载:http://www.sqlitebrowser.org/dl/
csdn资源下载:https://download.csdn.net/download/qq_37356556/20679425
下载后直接解压。
数据库编程主要分为两类:查询(Read)和修改(C插入、U更新、D删除)。
1 查询数据
查询数据时需要6步,在查询过程中需要提取数据结果集,最后释放资源,即关闭游标和数据库。
2 修改数据
修改数据时如上图所示,最多需要6步,在修改过程中如果执行SQL操作成功,则提交数据库事务;如果失败,则回滚事务。最后释放资源,关闭游标和数据库。
Python官方提供了sqlite3模块来访问SQLite数据库。
数据库访问的第一步是进行数据库连接。
我们可以通过connect(database)函数建立数据库连接,参数database是SQLite数据库的文件路径,如果连接成功,则返回数据库连接对象Connection。
Connection对象有如下重要的方法。
一个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():从结果集中返回所有数据。
无条件查询最为简单,没有WHERE子句。
其中result_set的数据类型是列表类型:
数据插入操作SQL语句是INSERT。
数据插入成功,可以使用DB Browser for SQLite浏览数据。
如果想让我们的程序同时执行多个任务,就需要使用多线程技术了。到目前为止,我们编写的程序都是单线程的,在运行时一次只能执行一个任务。
一个进程就是一个正在执行的程序,每一个进程都有自己独立的一块内存空间、一组系统资源。在进程的概念中,每一个进程的内部数据和状态都是完全独立的。
在Windows操作系统中,一个进程就是一个exe或者dll程序,它们相互独立,相互也可以通信。
在一个进程中可以包含多个线程,多个线程共享一块内存空间和一组系统资源。所以,系统在各个线程之间切换时,开销要比进程小得多,正因如此,线程被称为轻量级进程。
Python程序至少有一个线程,这就是主线程,程序在启动后由Python解释器负责创建主线程,在程序结束后由Python解释器负责停止主线程。
在多线程中,主线程负责其他线程的启动、挂起、停止等操作。其他线程被称为子线程。
Python官方提供的threading模块可以进行多线程编程。threading模块提供了多线程编程的高级API,使用起来比较简单。
在threading模块中提供了线程类Thread,还提供了很多线程相关的函数,这些函数中常用的如下。
有时,一个线程(假设是主线程)需要等待另外一个线程(假设是t1子线程)执行结束才能继续执行。
参数timeout用于设置超时时间,单位是秒。如果没有设置timeout,则可以一直等待,直到结束。
从运行结果来看,在子线程t1结束后,主线程才输出变量value的内容,这说明主线程被阻塞了。
如果尝试将t1.join()语句注释掉,则输出结果如下:
此时主线程未中途停止。
这个网络爬虫程序每隔一段时间都会执行一次下载图片任务,在下载任务完成后,休眠一段时间再执行。这样反复执行,直到爬虫程序停止。
示例参考代码如下:
以上所有课程来自b站:https://www.bilibili.com/video/BV1Fh411h7WM