在此感谢关东升老师《看漫画学Python》,大家如有需要请购买正版书籍。
以下是学习Python所记录的笔记,以便自己学习回顾。
Python.之所以受到大家的欢迎,是因为它有很多优秀“品质”。
Python中有6种主要的内置数据类型:数字、字符串、列表、元组、集合和字典
列表、元组、集合、字典将在 6.容器类型数据 介绍
Python中有4种数字类型:整数类型、浮点类型、复数类型和布尔类型。
Python中的整数类型为int类。
Python的浮点类型为float类。
复数在数学中被表示为:a+bi,其中a被称为实部,b被称为虚部,被称为虚数单位。
Python中的布尔类型为bool类:它只有两个值:
True和False。
1.隐式类型的转换
2.显式类型的转换
while 语句,在Python语言中只有while语句,没有do-while语句。
跳转语句能够改变程序的执行顺序
包括break、continue和return。
序列(sequence)是一种可迭代的、元素有序的容器类型的数据。
序列的索引操作,序列中的元素是有序的,每一个元素都带有序号,这个序号叫作索引,索引有“正值索引”和“负值索引”之分
加和乘操作,加(+)和乘(x)运算符也可以用于序列中的元素操作。加(+)运算符可以将两个序列连接起来,乘(x)运算符可以将两个序列重复多次。
序列的切片(Slicing)就是从序列中切分出小的子序列
切片运算符的语法形式为[start:end:step]
。
其中,start是开始索引,end是结束索引,step是步长(切片时获取的元素的间隔,可以为正整数,也可以为负整
成员测试运算符有两个:in和not in,
in用于测试是否包含某一个元素,not
in用于测试是否不包含某一个元素。
追加元素,列表是可变的序列对象,列表可以追加元素。
1.在列表中追加单个元素时,可以使用列表的append()方法。
2.在列表中追加多个元素时,可以使用加(+)运算符或列表的extend(t)方法
想向列表中插入元素时,可以使用列表的list.insert(i, x)方法,其中,i指定索引位置,x是要插入的元素。
想替换列表中的元素时,将列表下标索引元素放在赋值符号(=)的左边,进行赋值即可。
想在列表中删除元素时,可使用列表的list.remove(x)方法。
创建元组时有两种方法
1.tuple(iterable)函数
2.(元素1,元素2,元素3,…)
集合(set)是一种可迭代的、无序的、不能包含重复元素的容器类型的数据。
可以通过以下两种方式创建列表:set(iterable)函数和{元素1, 元素2, 元素3, …}
修改集合类似于修改列表,可以向其中插入和删除元素。修改可变集合有以下常用方法。
●add(elem)
:添加元素,如果元素已经存在,则不能添加,不会抛出错误。
●remove(elem)
:删除元素,如果元素不存在,则抛出错误。
●clear()
:清除集合。
字典(dict)是可迭代的、通过键(key)来访问元素的可变的容器类型的数据。
键视图不能包含重复的元素,值视图能。在键视图中,键和值是成对出现的。
可以通过以下两种方法创建字典:dict()
函数和{key1:value1, key2:value2,..., key_n:value_n}
字典可以被修改,但都是针对键和值同时操作的,对字典的修改包括添加、替换和删除。
可以通过字典中的以下方法访问字典视图:items()
;keys()
;values()
。
普通字符串指采用单引号(’ ')或双引号(" ")括起来的字符串
常用转义符
使用原始字符串(raw string)表示,原始字符串中的特殊字符不需要被转义,按照字符串的本来样子呈现。在普通字符串前加r就是原始字符串了
对于长字符串,使用三个单引号(‘’')或三个双引号(“”")括起来
将字符串转换为数字,将字符串转换为数字,可以使用int()和float()实现,如果成功则返回数字,否则引发异常
将数字转换字符串,可以使用str()函数,str()函数可以将很多类型数据都转换为字符串
格式化字符串的函数 str.format()
要想将表达式计算结果插入字符串中,则需要用到占位符。对于占位符,使用一对大括号({})表示
字符串的find()
方法用于查找子字符串…
str.find(sub[,start[,end])
查找子字符串,在索引start到end之间查找子字符串sub,如果找到,则返回最左端位置的索引;了如果没有找到,则返回-1。
若想进行字符串替换,则可以使用replace()
方法替换匹配的子字符串,返回值是替换之后的字符串
str.replace(old,new[,count])
字符串替换 new子字符串替换old子字符串。
count参数指定了替换old子字符串的个数,counti被省略,则替换所有old子字符串。
若想进行字符串分割,则可以使用split()
方法,按照子字符串来分割字符串,返回字符串列表对象。
str.split(sep=None,maxsplita=-1)
,使用sep子字符串分割字符串str。
maxsplit是最大分割次数,如果maxsplit被省略,则表示不限制分割次数。
函数具有函数名、参数和返回值。
Pyth0n中的函数很灵话:可以在模块中但是类之外定义,作用域是当前模块,我们称之为函数;也可以在别的函数中定义,我们称之为嵌套函数;还可以在类中定义,我们称之为方法。
由于定义函数时的参数不是实际数据,会在调用函数时传递给它们实际数据…
由于定义函数时的参数不是实际数据,会在调用函数时传递给它们实际数据,所以我们称定义函数时的参数为形式参数,简称形参;称调用函数时传递的实际数据为实际参数,简称实参。你可以将形参理解为在函数中定义的变量。
使用位置参数调用函数,调用函数时传递的实参与定义函数时的形参顺序一致,这是调用函数的基本形式。
使用关键字参数调用函数,调用函数时可以采用“关键字=实参”的形式,其中,关键字的名称就是定义函数时形参的名称。
函数重载会增加代码量,所以在Python中没有函数重载的概念,而是为函数的参数提供默认值实现的。
Python中的函数可以定义接收不确定数量的参数,这种参数被称为可变参数。可变参数有两种,即在参数前加 * 或 **。
变量可以在模块中创建,作用域(变量的有效范围)是整个模块,被称为全局变量。变量也可以在函数中创建,在默认情况下作用域是整个函数,被称为局部变量。
Python中的任意一个函数都有数据类型,这种数据类型是 function,被称为函数类型。
1.一个函数可以作为另一个函数返回值使用。
2.一个函数可以作为另一个函数参数使用。
函数类型数据与其他类型数据是一样的,类型数据可以作为函数返回值使用,还可以作为函数参数使用。
过滤函数filter,在Python中定义了一些用于数据处理的函数,如filter()
和map()
等
在Python中使用lambda关键字定义匿名函数。
lambda关键字定义的函数也被称为lambda函数。
面向对象是一种编程思想,即按照真实世界的思维方式构建软件系统。
Python中的数据类型都是类,我们可以自定义类,即创建一种新的数据类型
类相当于一个模板,依据这样的模板来创建对象,就是类的实例化,所以对象也被称为“实例”
类中的__init__
()方法是一个非常特殊的方法,用来创建和初始化实例变量,这种方法就是“构造方法”
实例方法与实例变量一样,都是某个实例(或对象)个体特有的方法。
类方法与类变量类似,属于类,不属于个体实例。在定义类方法时,它的第一个参数不是self,而是类本身。
封装隐藏了对象的内部细节,只保留有限的对外接口,外部调用者不用关心对象的内部细节,使得操作对象变得简单。
为了防止外部调用者随意存取类的内部数据(成员变量),内部数据(成员变量)会被封装为“私有变量”
私有变量,则在变量前加上双下画线(__
)。
私有方法与私有变量的封装是类似的,在方法前上双下画线(__
)就是私有方法了。
为了实现对象的封装,一个类中不应该有公有的成员变量,这些成员变量应该被设计为私有的,然后通过公有的set(赋值)和get(取值)方法访问。
1.继承性也是面向对象重要的基本特性之一。在现实世界中继承关系无处不在。
2.例如猫与动物之间的关系:猫是一种特殊动物,具有动物的全部特征和行为,即数据和操作。在面向对象中动物是一般类,被称为”父类”;猫是特殊类,被称为“子类”。特殊类拥有一般类的全部数据和操作,可称之为子类继承父类。
在Python中声明子类继承父类,语法很简单,在定义类时在类的后面使用一对小括号指定它的父类就可以了。
在Python中,当子类继承多个父类时,如果在多个父类中有相同的成员方法或成员变量,则子类优先继承左边父类中的成员方法或成员变量,
多态性也是面向对象重要的基本特性之一。“多态”指对象可以表现出多种形态。
1.“多态”指对象可以表现出多种形态。
2.例如,猫、狗、鸭子都属于动物,它们有“叫”和“动”等行为,但是”叫的方式不同,“动”的方式也不同。
在多个子类继承父类,并重写父类方法后,这些子类所创建的对象之间就是多态的。这些对象采用不同的方式实现父类方法。
Python的多态性更加灵活,支持鸭子类型测试
1.鸭子类型测试指:若看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟可以被称为鸭子。
2.Python支持鸭子类型测试,Python解释器不检查发生多态的对象是否继承了同一个父类,只要它们有相同的行为(方法),它们之间就是多态的。
在数学中,任何整数都不能除以0,如果在计算机程序中将整数除以0,则会引发异常。
我们不能防止用户输入0,但在出现异常后我们能捕获并处理异常,不至于让程序发生终止并退出。亡羊补牢,为时未晚。
多条语句可能会引发多种不同的异常,对每一种异常都会采用不同的处理方式。针对这种情况,我们可以在一个try后面跟多个except代码块。
如果多个except代码块的异常处理过程类似,则可以合并处理,就是多重异常捕获。
0.2.4 try-except语句嵌套
try-except语句可以嵌套。
有时在try-excepti语句中会占用一些资源,可以使用finally代码块。
为了提高代码的可重用性,自己编写了一些Python类库,其中自己编写了一些异常类。
(Exception)继承Exception父类
def __init__
()构造方法,有 message 异常错误消息。
到目前为止,接触到的异常都是由于解释器引发的,也可以通过raise语句手动引发异常。
● datetime:包含时间和日期。
● date:只包含日期。
● time:只包含时间。
● timedelta:计算时间跨度。
● tzinfo:时区信息。
datetime类的常用方法如下:
●datetime.today():返回当前的本地日期和时间。
●datetime.now(tz=None):返回指定时区的当前日期和时间,参数tz用于设置时区,如果参数tz为None或省略,则等同于today()。
●datetime.fromtimestamp(timestamp,tz=None):返回与UNlX时间戳对应的本地日期和时间。UNIX时间戳是从1970年1月1日00:00:00开始到现在为止的总秒数。
date类的常用方法如下:
●date.today():返回当前的本地日期。
●date.fromtimestamp(timestamp):返▣与UNlX时间戳对应的本地日期。
可以使用timedelta类。timedelta类用于计算datetime、date和time对象的时间间隔。
1.将日期时间对象转换为字符串时,称之为日期时间格式化。
在 Python中使用strftime()方法进行日期时间的格式化,在datetime、 date和time三个类中都有一个实例方法strftime(format)。
2.将字符串转换为日期时间对象的过程,叫作日期时间解析。
在 Python中使用datetime.strptime(date string,format)类方法进行日期时间解析。
正则表达式指预先定义好一个“字符串模板”,通过这个“字符串模板”可以匹配、查找和替换那些匹配“字符串模板”的字符串
字符串匹配指验证一个字符串是否符合指定的“字符串模板”,经常被用于用户输入验证。
我们使用match(p,tet)
函数进行字符串匹配,其中的参数p是正则表达式,即字符串模板,text是要验证的字符串。如果匹配成功,则返回一个Match对象(匹配对象),否则返回None。
字符串查找指从一个字符串中查找匹配正则表达式的子字符串。
1.search(p,tet)
: 在tet字符串中查找匹配的内容,如果找到,则返回第1个匹配的Match对象,否则返回None。p是正则表达式。
2.findall(p,text)
: 在text字符串中查找所有匹配的内容,如果找到,则返回所有匹配的字符串列表;如果一个都没有匹配,则返回None。p是正则表达式。
使用正则表达式的字符串替换函数是sub()
,该函数替换匹配的子字符串。
参数pattern是正则表达式:
参数repl是用于替换的新字符串;
参数string是即将被替换的旧字符串;
参数count是要替换的最大数量,默认值为零,表示不限制替换数量。
在Python中使用re模块中的split()
函数进行字符串分割,该函数按照匹配的子字符串进行字符串分割,
参数pattern:是正则表达式;
参数string.是要分割的字符串;
参数maxsplit是最大分割次数;maxsplit的默认值为零,表示分割次数没有限制。
在打开文件后,如果不再使用该文件,则应该将其关闭,会用到close()方法。
with as提供了一个代码块,在as后面声明一个资源变量在with as代码块结束之后自动释放资源。
● read(size=-1)
:从文件中读取字符串,size限制读取的字符数,size=-1指对读取字符数没有限制。
● readline(size=-1)
:在读取到换行符或文件尾时返回单行字符串。如果已经到文件尾则返回一个空字符串。size是限制读取的字符数,size=-1表示没有限制。
● readline()
:读取文件数据到一个字符串列表中,每一行数据都是列表的一个素。
● write(s)
:将字符串s写入文件中,并返回写入的字符数。
● writelines(lines)
:向文件中写入一个字符串列表。不添加行分隔符,因此通常为每行末尾都提供行分隔符。
● flus()
:刷新写缓冲区,在文件没有关闭的情况下将数据写入文件中。
● read(size=-1)
:从文件中读取字节,size限制读取的字节数,如果size=-1,侧读取全部字节。
● readline(size=-1)
:从文件中读取并返回一行。size是限制读取的字节数,如果size=-1,则没有限制。
● readlines()
:读取文件数据到一个字节列表中,每一行数据都是列表的一个元素。
● write(b)
:写入b字节,并返回写入的字节数。
● writelines(lines)
:向文件中写入一个字节列表。不添加行分隔符,因此通常为每一行末尾都提供行分隔符。
● flush()
:刷新写缓冲区,在文件没有关闭的情况下将数据写入文件中。
● 安装wxPython
● wxPython的程序结构
● 自定义窗口类
● 在窗口中添加控件
● 事件处理
● 布局管理
● 控件
Python中的图形用户界面开发库,Python中的图形用户界面开发库有很多,较为突出的有:Tkinter、PyQt和wxPython。推荐使用wxPython开发图形用户界面。
Tkinter是Python官方提供的图形用户界面开发库,用于封装TkGU工具包,跨平台。
PyQt是非Python官方提供的图形用户界面开发库,用于封装Qt工具包,跨平台。
wXPython是非Python官方提供的图形用户界面开发库,也跨平台。
pip install wxPython -i https://pypi.tuna.tsinghua.edu.cn/simple
import wx
#创建应用程序对象
app = wx.App()
#创建窗口对象
frm = wx.Frame(None,title="第一个wxPython程序!",size=(400,300),pos=(100,100))
#显示窗口
frm.Show ()
#进入主事件循环
app.MainLoop ()
模板
import wx
#自定义窗口类MyFrame
class MyFrame (wx.Frame):
def __init__(self):
super().__init__(None,title="第-个wxPython程序!",size=(400,300),pos=(100,100))
#你的代码
#创建应用程序对象
app = wx.App()
#创建窗口对象
frm = MyFrame ()
#显示窗口
frm.Show ()
#进入主事件循环
app.MainLoop ()
import wx
#自定义窗口类MyFrame
class MyFrame (wx.Frame):
def __init__(self):
super().__init__(None,title="第-个wxPython程序!",size=(400,300),pos=(100,100))
panel = wx.Panel(parent=self)
statictext = wx.StaticText(parent=panel,label='Hello World', pos=(10,10))
#创建应用程序对象
app = wx.App()
#创建窗口对象
frm = MyFrame ()
#显示窗口
frm.Show ()
#进入主事件循环
app.MainLoop ()
图形界面的控件要响应用户的操作,就必须添加事件处理机制。
● 事件源:事件发生的场所,就是各个控件,例如按钮事件的事件源是按钮。
● 事件:wXPython中的事件被封装为事件类wx.Event
及其子类,例如按钮事件类是wx.CommandEvent
,鼠标事件类是wx.MoveEvent
。
● 事件处理程序:一个响应用户事件的方法。
import wx
#自定义窗口类MyFrame
class MyFrame (wx.Frame):
def __init__(self):
super().__init__(None,title="事件处理",size=(400,300))
panel = wx.Panel(parent=self)
self.statictext = wx.StaticText(parent=panel,label='请点击OK按钮', pos=(150,50))
b = wx.Button(parent=panel,label='OK',pos=(150,90))
self.Bind(wx.EVT_BUTTON,self.on_click,b)
def on_click(self,event):
self.statictext.SetLabelText('Hello,World.')
#创建应用程序对象
app = wx.App()
#创建窗口对象
frm = MyFrame ()
#显示窗口
frm.Show ()
#进入主事件循环
app.MainLoop ()
盒子布局管理器类是wx.BoxSizer,Box布局管理器是最常用的布局管理器,它可以让其中的子窗口(或控件)沿垂直或水平方向布局。
import wx
#自定义窗口类MyFrame
class MyFrame (wx.Frame):
def __init__(self):
super().__init__(None,title="事件处理",size=(300,180))
panel = wx.Panel(parent=self)
self.statictext = wx.StaticText(parent=panel,label='请点击OK按钮')
b = wx.Button(parent=panel,label='OK')
self.Bind(wx.EVT_BUTTON,self.on_click,b)
#创建垂直方向的盒子布局昝理器对象vbox
vbox = wx.BoxSizer(wx.VERTICAL)
#添加静态文本到vbox布局管理器
vbox.Add(self.statictext,proportion=1,
flag=wx.ALIGN_CENTER_HORIZONTAL|wx.FIXED_MINSIZE| wx.TOP,border=30)
#添加按钮b到vbox布局管理器
vbox.Add(b,proportion=1,flag=wx.EXPAND|wx.BOTTOM,border=10)
#设置面板(pane1)采用vbox布局管理器个
panel.SetSizer(vbox)
def on_click(self,event):
self.statictext.SetLabelText('Hello,World.')
#创建应用程序对象
app = wx.App()
#创建窗口对象
frm = MyFrame ()
#显示窗口
frm.Show ()
#进入主事件循环
app.MainLoop ()
参考此博主的博文
图形界面wxPython 库的使用
文本输入控件(wx.TextCtrl)是可以输入文本的控件。
多选控件是复选框(wx.CheckBox),复选框(wx.CheckBox)有时也能单独使用,能提供两种状态的开和关。
在列表控件可以进行单选或多选,列表控件类是wx.ListBox。
静态图片控件用来显示一张图片,图片可以是wx.Python所支持的任何图片格式,静态图片控件类是wx.StaticBitmap