图像处理算法及其Python实践 课件 第1章 Python 程序设计基础_第1页
图像处理算法及其Python实践 课件 第1章 Python 程序设计基础_第2页
图像处理算法及其Python实践 课件 第1章 Python 程序设计基础_第3页
图像处理算法及其Python实践 课件 第1章 Python 程序设计基础_第4页
图像处理算法及其Python实践 课件 第1章 Python 程序设计基础_第5页
已阅读5页,还剩71页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

图像处理算法及其Python实践第1章Python程序设计基础第2章Python图像处理基础第3章深度学习基础第4章图像分类第5章图像分割第6章目标检测第7章人脸识别第8章图像风格迁移第9章图像描述第1章Python程序设计基础1.1Python语言快速入门1.2Python语法速览1.3类与模块1.4图像界面设计1.1Python语言快速入门Python语言是一门动态类型的解释型语言。作为解释型语言,Python不像C++、C语言那样在运行之前要通过编译器进行漫长的编译过程生成二进制文件后才能运行,Python程序只需要在运行的操作系统上安装Python解释器就可以运行,Python解释器会将代码逐行解释为机器码后再运行。虽然Python语言被归为脚本语言,但是它相比于ShellScript、VBScript等脚本语言只能处理简单的任务,Python几乎可以处理所有计算机处理的任务。Python的设计强调代码的可读性和简洁的语法。相对于C++、Java语言,Python的代码更加简洁清晰。其缺点也很明显,运行效率没有前面两者那么高效,但在大部分情况下,Python的运行效率完全能满足需求。在大型的工程项目中,对于性能要求极高的部分,会使用C或C++等语言开发,然后使用Python调用相应的模块。因此,很多人都把Python当作一种“胶水语言”使用。1.1.1Python的版本与安装1.Python的实现版本1)CPython。这是由Python软件基金会创建的官方标准的Python解释器,也是最流行的Python解释器。2)ActivePython。这是由ActiveState公司发行的一套企业级二进制Python编程调试工具,带有集成开发环境IDE(IntegratedDevelopmentEnvironment)。ActivePython有三个发行版本:社区版、商业版和企业版,适用于windows和Linux操作系统,并和其他Python实现兼容。3)Anaconda。Python语言的主要用途就是数据分析和机器学习。当使用Anaconda进行数据科学和科学计算时,可以轻松创建和管理Python和R环境,以确保库和依赖项的有效管理,同时保持版本兼容性。1.1.1Python的版本与安装2.Python的开发工具1)VSCode。VSCode是由微软开发的,同时支持Windows、Linux和MacOS操作系统且开放源代码的文本编辑器。它支持程序调试,并内置了Git版本控制功能,同时也具有开发环境功能,如代码补全、代码片段、代码重构等。该编辑器支持用户自定义配置,还支持扩展程序并在编辑器内置了扩展程序管理功能。2)PyCharm。PyCharm是由JetBrains公司开发的一款IDE工具,它集成了一些系列开发功能,如Python包管理、虚拟环境管理、框架整合和Git等。PyCharm大大节省了程序开发时间,程序运行更快捷,且代码可以自动更新格式,并支持多种操作系统。1.1.1Python的版本与安装3.Python解释器和文本编辑器VSCode的下载安装登录Python官方网站(/),如图1-1所示。点击Downloads->windows,下拉选择需要的版本,如图1-2所示。图1-2版本选择界面图1-1Python官网界面1.1.1Python的版本与安装Python解释器和文本编辑器VSCode的下载安装下载后双击打开,勾选添加到环境变量,开始安装,如图所示。图1-3添加到环境变量1.1.1Python的版本与安装Python解释器和文本编辑器VSCode的下载安装安装完成Python解释器后,进VSCode官网(/)安装文本编辑器。图1-4选择相应版本安装VSCode1.1.1Python的版本与安装Python解释器和文本编辑器VSCode的下载安装安装完成之后,双击打开,在左侧的搜索栏中输入Python,安装Python扩展,如图所示。至此,Python解释器与文本编辑器安装完毕。图1-5在VSCode中进行Python扩展1.1.1Python的版本与安装Python解释器和文本编辑器VSCode的下载安装按下键盘上的Win+R键,输入cmd命令进入MS-DOS界面,输入python,显示版本为3.8.1,表明python已经正确安装。图1-6MSDOS界面1.1.1Python的版本与安装4.集成开发环境Pycharm下载安装PyCharm是JetBrains开发的一个流行的Python集成开发环境(IDE),提供了强大的编辑、调试和开发功能。以下是下载和安装PyCharm的步骤:(1)打开浏览器,访问PyCharm官方下载网站,网址如下所示:/en-us/pycharm/(2)点击“下载”按钮,选择与你的操作系统(Windows、macOS或Linux)相对应的安装包。(3)下载完成后,双击.exe安装文件,启动安装程序。按照安装向导的步骤进行安装。你可以选择安装路径,创建桌面快捷方式,并选择添加到系统PATH环境变量中。1.1.2编写简单的Python程序首先,按下键盘上的Win+R,输入cmd命令进入MSDOS界面,输入python,显示版本为3.8.1,表明python已经正确安装。从终端运行程序。在>>>后面即可输入简单的Python代码片段。输入“print(”HelloWorld!“)”,并按下回车键,输出结果如图1-7所示。图1-7从终端运行程序1.1.3编辑和运行复杂的Python程序使用VSCode软件编写Python代码,在VSCode中点击“新建文件”按钮,输入文件名,例如demo.py,在新创建的demo.py文件中,输入程序“print("HelloVSCode!")”,输出结果如下图1-8所示。图1-8在VSCode中运行程序1.1.3编辑和运行复杂的Python程序使用Pycharm编写Python程序,打开PyCharm点击“CreateNewProject”,选择项目位置和Python解释器,点击“Create”。在项目视图中右键项目目录,选择“New”->“PythonFile”,输入文件名(如hello.py)。在hello.py文件中输入:保存为first.py,并运行,输出如下:message1="pythonworld"message=f"Hello,welcometo{message1.title()}!"print(message)print("Herewego!")Hello,welcometoPythonWorld!Herewego!1.2Python语法速览本节将介绍Python语言中的一些基本语法,如一些基本的数据类型、数据结构与简单的函数使用等。1.2.1数据类型本节将介绍Python语言中的一些基本语法,如一些基本的数据类型、数据结构与简单的函数使用等。在Python中,常见的数据类型有整型、浮点型、字符串和布尔型,如下表1-1。表1-2列出了Python常用的运算符。数据类型示例整型-2,-1,0,1,2,3浮点型-1.1,-1.4,3.14,1.414字符串‘a’,’Hello’,’aa’,’hello’布尔型其值只有两个,即False和True操作符描述示例+加法a+b-减法a-b*乘法a*b/除法a/b%取模a%b**指数运算a**b//取商的整数部分a//b==相等a==b!=不相等a!=b>=,<=大于等于,小于等于a>=b,a<=b&按位与a&b|按位或a|b^按位异或a^b~按位取反a~b<<左移运算符,左操作按位左移右操作数指定位数a<<b>>右移运算符,左操作按位右移右操作数指定位数a>>bAnd逻辑与aandbOr逻辑或aorbNot逻辑非nota表1-1表1-21.2.1数据类型Python中,在数学表达式中含有浮点数时,输出结果一定也是浮点数,有时候包含的小数位数是不确定的。在除法运算时,输出结果也一定是浮点数,即便能够被整除。除了整数和浮点型数据,Python还可以处理字符串。在Python中可以用“‘’”或“”“”括起来代表字符串,也可以使用“\”操作符来对特殊字符转义。例如“\’‘”表示为单引号,“\n”表示为换行符,“\t”为制表符。下面是命令行中演示一些字符处理的例子1.2.1数据类型Python中,可以使用“+”拼接两个字符串,使用“*”来重复字符串。当多个字符串相邻时,解释器会自动合并。如下:>>>a="Hello">>>b="World">>>a+b‘HelloWorld’>>>'Hello''World'‘HelloWorld’>>>2*'A'+'pple'‘Aapple1.2.1数据类型Python可以通过“索引”方式来获取字符串中某个位置的字符。>>>a='fragrant'>>>a[0]‘f’>>>a[0]+a[5]‘fa’>>>a[-1]‘t’>>>a[-6]‘a’>>>a[-8]‘f’

1.2.1数据类型索引为正数时,从字符串左边向右查找(0和-0都表示第一个字符)。当索引为负数时,从字符串右边向左查找。(最右边的索引为-1,并依次向左为-2,-3...)。想要获取字符串中的一段字符串,可以通过如下“切片”操作来实现。>>>a='water'>>>a[0:3]‘wat’>>>a[:3]‘wat’>>>a[1:]‘ater’1.2.2列表与元组列表是由一系列按特定顺序排列的元素组成,列表通常包含多个元素,非常适合用于存储在程序运行期间可能变化的数据集。在Python中,用方括号[]表示列表,并用逗号分割其中的元素。下面是一个简单的列表示例。打印出来的结果包括方括号,输出如下:app=['a','b','c','d’]print(app)['a','b','c','d']1.2.2列表与元组访问列表元素,可以通过索引的方式访问任意元素。输出结果如下:app=['a','b','c','d']print(app[0])print(app[1])print(app[-1])abd1.2.2列表与元组在Python语言中第一个元素索引为0而不是1,大多数编程语言都是这么规定的。此外,Python语言还通过设定最后一个元素的索引为-1来访问列表的最后一个元素。修改列表元素的值,通过指定列表名和对应元素的索引,对其重新赋值。示例代码如下:app=['a','b','c','d']print(app)app[0]='apple’print(app)['a','b','c','d’]['apple','b','c','d']输出结果如下:1.2.2列表与元组在列表末尾添加元素,可使用方法append()。演示示例代码如下:app=['red','yellow','blue','green']print(app)app.append('black’)print(app)['red','yellow','blue','green']['red','yellow','blue','green','black']输出结果如下:1.2.2列表与元组如果想要在列表任意位置插入元素,可使用方法insert()将相应的元素插入到相应的位置。app=['red','yellow','blue','green']print(app)app.insert(1,'black')app.insert(5,'white')print(app)['red','yellow','blue','green']['red','black','yellow','blue','green','white']输出结果如下:1.2.2列表与元组在Python中,知道列表元素的索引,可使用del语句删除元素。app=['red','yellow','blue','green']print(app)delapp[1]print(app)['red','yellow','blue','green']['red','blue','green']输出结果如下:1.2.2列表与元组还可以使用pop()方法删除列表末尾元素。app=['red','yellow','blue','green']print(app)app.pop()print(app)['red','yellow','blue','green']['red','yellow','blue']输出结果如下:pop()方法还可以用来删除指定位置的元素。只需要在()中添加对应元素的索引即可。1.2.2列表与元组元组与列表十分相似,大部分方法都通用,但是元组和列表的最大区别是列表可以修改,可以删除,而元组不能修改,不能删除单个元素,但是可以删除整个元组。元组定义和列表类似,元组定义时只需用“()”把元素括起来,并用“,”把元素隔开。下面定义一个元组,访问其中一个元素,并将元组打印出来。app=('apple','peach','mango','grape')print("Myfavoritefruitis",app[3])print(app)Myfavoritefruitisgrape('apple','peach','mango','grape')输出结果如下:1.2.2列表与元组如果定义只包含一个元素的元组,必须在这个元素后面加上一个“,”,否则元素还是原来的类型。app1=('apple')print(type(app1))app2=('apple',)print(type(app2))<class'str'><class'tuple'>输出结果如下:由输出结果知,app1为str字符串类型,而app2为tuple元组类型。1.2.2列表与元组由于元组不能修改,所以元组不能单独删除部分元素,只能删除整个元组。示例代码如下:app=('apple','peach','mango','grape')print(app)app[1]='orange'print(app)('apple','peach','mango','grape')TypeError:'tuple'objectdoesnotsupportitemassignment输出结果如下:在执行第三行代码修改元组元素时,输出会报错,显示元组类型不支持修改元素。元组不能删除单个元素,但可以执行del语句整体删除。1.2.3字典与集合在Python语言中,字典(dict)是一系列键值对。每个键都有一个值关联,可以使用键来访问关联的值。与键关联的值可以是数值、字符串、列表乃至是字典。任何Python对象都可用作于字典中的值。在Python语言中,字典用放在花括号{}中的一系列键值对表示,键和值之间用冒号分隔,而键值对之间用逗号分隔。下面定义一列表,并将其打印出来。fruit={'Joe':'apple','Michael':'peach','Tony':'mango','Maria':'grape'}print(fruit)输出结果如下:{'Joe':'apple','Michael':'peach','Tony':'mango','Maria':'grape'}1.2.3字典与集合访问字典中的值,可通过字典名和对应的键来获取,如获取键“Joe”对应的值,可以用如下代码实现print(fruit['Joe'])输出结果:applefruit={'Joe':'apple','Michael':'peach'}fruit['Tony']='mango'#添加Tony键delfruit['Joe']#删除Joe键还可以将字典中的值赋值给其他变量使用,也可以通过上面的方式去修改键对应的值。字典是一种动态结构,可随时在其中添加和删除键值对。只要依次指定字典名、用方括号括起来的键和相关联的值就可以在字典末尾添加上一个键值对。使用del语句,指定字典名和要删除的键,就可以删除键值对。示例代码如下:1.2.3字典与集合一个Python字典可能只包含几个键值对,也可能包含含有几百万个键值对。因此Python支持对字典的遍历,遍历的方式有多种。可遍历字典的所有键值对,也可仅遍历键或值。在遍历所有键值对可使用方法items(),它返回一个键值队列表。使用for循环依次将每个键值对赋给指定的两个变量。示例代码如下:fruit={'Joe':'apple','Michael':'peach','Tony':'mango','Maria':'grape'}forkeys,valuesinfruit.items():#将键值对赋值给两个变量print(keys,values)1.2.3字典与集合输出结果如下:JoeappleMichaelpeachTonymangoMariagrape在遍历键时只要使用方法keys(),就可访问字典中的所有键。使用values()方法,就可访问字典中所有键所对应的值。示例代码如下:forkeyinfruit.keys():#在for循环中依次将键赋值给变量keyforvalueinfruit.values():#在for循环依次将值赋给变量value1.2.3字典与集合有时候需要将一系列字典存储到列表中,或者将列表作为值存储在字典中,或者在字典中嵌套字典,这称为嵌套。下面演示在字典中嵌套字典。假设有一个字典users,里面设定两个键,每个用户对应一个键,每个键对应的值为一个字典,在字典中存储年龄,性别和爱好。users={'Joe':{'age':'18','sex':'male','hobby':'tabletennis',},'Maria':{'age':'19','sex':'female','hobby':'piano',},}forname,user_moreinusers.items():print("\n"+"name:"+name)print("age:"+user_more['age'],"\t","hobby:"+user_more['hobby'])1.2.3字典与集合输出结果如下:name:Joeage:18hobby:tabletennis

name:Mariaage:19hobby:piano1.2.3字典与集合集合(set)是Python的一个内置类型,它是一个非常有用的数据结构。它与列表的行为类似,唯一区别在于集合不会包含重复的值。下面演示集合的定义,以及添加和删除元素。app1=set()#空集合必须使用set()方法定义app1.add('apple')#使用add()方法添加元素app1.add(2)print(app1)app2=set([1,2,3,4])app2.remove(2)#使用remove方法删除元素print(app2)输出结果如下:{2,'apple'}{1,3,4}1.2.3字典与集合Python中的集合可以看成数学意义上的无序和无重复元素的集合。并且Python自带的集合类型支持很多数学意义上的集合操作。app1=set([1,3,4,6,7])app2=set([3,7,4,8,9])print("交集:",app1&app2,"\t","并集:",app1|app2)print("差集:",app2-app1)输出结果如下:交集:{3,4,7}并集:{1,3,4,6,7,8,9}差集:{8,9}1.2.4程序流程控制所有的编程语言在编写时都要遵照语言结构和流程控制结构,它们控制整个程序的运行步骤。流程控制包括顺序控制,条件控制和循环控制。常用的流程控制语句有if-else语句、for循环语句、while循环语句、continue语句、break语句、pass语句等。if-else语句按照条件选择执行不同的代码。if语句格式如下:if表达式:

语句1

语句2.....else:if表达式:....elif表达式:....elif表达式:....else:....或者1.2.4程序流程控制下面演示一个实例。x1=95ifx1<60:print("差")elifx1<80:print("良")elifx1<90:print("优")else:print("极优")极优输出结果如下:1.2.4程序流程控制循环结构有while语句和for语句。它们格式如下:while表达式:#表达式结果为True时,一直循环下去

语句1

语句2....

for变量in序列:#序列可以是列表,元组等可迭代对象

语句1#变量逐一遍历序列里的所有元素,遍历完退出循环体

语句2....1.2.4程序流程控制下面演示两个实例。x=1whilex<5:print(x)x=x+2输出结果如下:13x=[1,2,3]foryinx:y=y+1输出结果如下:2341.2.4程序流程控制在Python中的pass语句是空语句,其作用是保持程序结构的完整性。pass语句不做任何语句,一般用作占位语句。下面演示个实例。foriinrange(3):if1==2:passelse:print(i)输出结果如下:012从输出结果可以看出,pass语句并没有执行任何操作,只是保持了程序继续执行。1.2.4程序流程控制在Python中,缩进至关重要,行首的空格决定逻辑行的缩进层次,从而决定语句的分组,缩进不正确,就会引起程序出错。根据前面几种流程控制语句的学习,我们知道在流程控制语句之后必有缩进的语法块,有时候可能并不需要执行什么东西,然而空的语句并没有提供缩进,这时就需要pass语句来占位,保持程序的完整运行。前面的流程控制中,只要表达式的逻辑为真,循环就会一直运行下去。有时候我们需要立即跳出循环体,这时候就需要用到break语句和continue语句。1.2.4程序流程控制在执行break语句时,会立即退出循环体,直接结束整个循环体。而continue语句并不会退出整个循环体,而是跳过当前循环体去执行之后的循环。下面演示实例。foriinrange(4):ifi>1:breakprint(i)输出结果如下:011.2.5函数定义与调用在编程中会经常执行类似的操作,这些操作由同一段代码完成。函数的出现把相对独立的某些功能抽象出来,成为一个独立的个体,调用函数可以帮助我们避免重复编写这些代码。函数定义时,通常会包含一个或多个形参(函数的参数),调用函数时会传入一个或多个实参(实际传递给函数的值)。下面是函数定义的基本语法格式:deffunction_name(arg1,arg2):functionbodyreturnvalue以上就是函数的基本定义,以“def”开头,加上函数名。在后面的括号内加入形参,可能一个或多个,也可能没有。之后根据需求书写函数内容,并在函数定义最后返回想要的值,也可以没有返回值,根据需要定义。1.2.5函数定义与调用下面演示一个示例:defgreet(name,language):print("Hello,"+name)print("Welcometo"+language+"world!")greet("Joe","Python")此处定义函数greet(),函数实现打印两条语句的功能。调用函数时,提供两个实参“Joe”和“Python”分别传递给两个形参name和language。调用函数greet输出为:Hello,JoeWelcometoPythonworld!1.3类与模块Python是一种面向对象的编程语言,本小节将要介绍Python中的类和对象的相关概念与基本使用,同时引入模块的概念,学习该如何导入、调用与创建模块。1.3.1类与对象面向对象编程是一种程序设计范式,其中程序由多个对象组成。对象不仅可以定义复杂的数据结构,还可以包含复杂的算法和方法。对象将数据和方法封装在一起,开发者只需处理对象内部的数据和算法,并提供接口来调用这些功能。类必须在定义后才能使用,定义一个类也就是定义这一类对象的模板,定义它的属性和方法。在Python中提供了class关键字来声明一个类,类名首字母大写。class中有成员属性和方法。类的定义如下:class[类名]:def__init__(self,args1,args2):#定义成员属性...def[方法名](self):#定义成员方法...1.3.1类与对象下面演示一个实例,创建一个描述人的类Person。Person类中定义两个属性name1和age1,构造了两个方法sleep()和study()。classPerson:def__init__(self,name,hobby):#定义属性1=nameself.hobby1=hobbydefsleep(self):#定义方法print(1,"issleepingnow")defstudy(self):#定义方法print(1,"isfondof",self.hobby1)person1=Person('Michael','sports')#创建实例对象person1person1.sleep()#调用sleep()方法person1.study()#调用study()方法1.3.1类与对象在创建实例时,有些属性无须提供实参,并通过形参来定义,可在方法__init__中为其指定默认值。例如上面的Person类,可默认属性eyes为‘two’,如下:classPerson:def__init__(self,name,hobby):1=nameself.hobby1=hobbyself.eyes='two'defsleep(self):print(1,"issleepingnow")defstudy(self):print(1,"isfondof",self.hobby1)defstruct(self):print("Thispersonhas",self.eyes,"eyes")person1=Person('Michael','sports')person1.struct()Thispersonhastwoeyes1.3.1类与对象在使用类来模拟现实世界的许多场景时,通常需要修改实例的属性,修改方法有两种:一是通过实例进行修改,二是在类的内部定义函数进行属性修改。classPerson:def__init__(self,name,hobby):1=nameself.hobby1=hobby

defsleep(self):print(1,"issleepingnow")

defstudy(self):print(1,"isfondof",self.hobby1)

defmodify(self,hobby_):#定义修改hobby1属性值的方法self.hobby1=hobby_print(1,"isfondof",self.hobby1)

#创建实例对象person1=Person('Michael','sports')

#通过方法输出属性值person1.study()#直接使用句点表示法修改属性值person1.name1='John'#直接修改name1属性值print(1,"isnowfondof",person1.hobby1)

#通过方法修改属性值person1.modify('arts’)Print(person。name

MichaelisfondofsportsJohnisfondofarts输出结果如下:1.3.2类的继承与多态面向对象的编程具有三大特性,即封装性、继承性和多态性。这些特性使得程序设计具有良好的扩展性和健壮性。类与对象、函数等的创建,在一定程度上体现了Python语言的封装特性,它将代码封装成一个个子模块,不仅使得代码逻辑清晰,而且提高了代码的复用性。下面将介绍另外两大特性,继承与多态。1.3.2类的继承与多态继承是一种对类进行分层级划分的概念。继承的基本思想是在一个类的基础上制定出一个新的类,这个新的类不仅可以继承原来类的属性和方法,还可以增加新的属性和方法。原来的类被成为父类,新的类被成为子类。在Python中,定义子类和定义普通类的方法相同,只是需要在子类的括号里增加需要继承的父类的名字。定义形式如下:classBaseClass1:#定义父类def__init__(self,args1,args2):[语法块]deffunction__1(self):[语法块]...classSubClass(BaseClass1):#定义子类,在括号内表明继承的父类名称def__init__(self,srgs1,args2):super().__init__(args1,args2)#使用super()调用父类__init__()[语法块]#可以定义子类特有属性deffunction_2(self):#可以可定义子类特有方法[语法块]...1.3.2类的继承与多态下面演示一个实例。classPerson:def__init__(self,name,food):1=nameself.food1=fooddeflife(self):print(1,"isfondof",self.food1)classMyperson(Person):def__init__(self,name,food,fruit__):super().__init__(name,food)#使用super()调用父类__init__()方法self.fruits=fruit__#定义子类特有的属性self.diets={}defdiet(self,diet__):#定义子类特有的方法。self.diets=diet__print("Hisaffectionsfor",self.food1+":")print("\t"+"fruits:",end="")forfruits1inself.fruits:print(fruits1,end="")print('\n\t'+"others:",self.diets)user1=Myperson('Michael','Chinesefoods',['orange','apple','mango'])#子类实例user1.life()#子类实例调用父类方法diets__table={'vegetables':'tomato','beanprducts':'tofu','meat':'pork'}user1.diet(diets__table)#子类实例调用子类方法输出如下:MichaelisfondofCinesefoodsHisaffectionsforCinesefoods:fruits:orangeapplemangoothers:{'vegetables':'tomato','beanprducts':'tofu','meat':'pork'}1.3.2类的继承与多态类的多态继承的思想可以帮助我们重复使用代码,但有时候子类的行为会和父类有所不同。当子类和父类有相同的方法时,子类的方法会覆盖父类的方法,这样的代码在运行时总会调用子类的方法,这就是多态。多态会根据类的不同表现出不同的行为。下面演示一个示例。1.3.2类的继承与多态输出结果如下#定义基类FruitclassFruit:defkind(self):print("fruit")#定义继承自Fruit的子类OrangeclassOrange(Fruit):defkind(self):print("orange")

#定义继承自Orange的子类AppleclassApple(Orange):defkind(self):print("apple")#创建Fruit类的实例type_1=Fruit()type_1.kind()#输出:fruit,多态表现为调用Fruit类的kind方法

#创建Orange类的实例type_2=Orange()type_2.kind()#输出:orange,多态表现为调用Orange类的kind方法

#创建Apple类的实例type_3=Apple()type_3.kind()#输出:apple,多态表现为调用Apple类的kind方法Fruitorangeapple由输出结果可知,当子类和父类方法一样时,子类会覆盖父类的方法,表现出与父类不同的行为。1.3.3模块模块就是一个包含Python定义和声明的“.py”文件,里面包含一些定义的变量和函数。Python解释器通过模块来组织代码,通过“包”来加以组织模块,而“包”包含模块且至少包含一个__init__.py的文件。简单来说,包就是文件夹,且该文件夹下必须有__init__.py文件,该文件的内容可以为空。__init__.py用于标识当前文件夹是一个包。下面给出如何从一个包文件里面加载模块,以及模块中的类和函数。1.3.3模块#从包里加载模块frompackageNameimportmoduleName

#给加载的模块取别名为aliasNamefrompackageNameimportmoduleNameasaliasName

#从模块里加载类frommoduleNameimportclassName

#给加载的类取别名为aliasClassNamefrommoduleNameimportclassNameasaliasClassName

#从模块里加载函数frommoduleNameimportfunctionName

#给加载的函数取别名为aliasFunctionNamefrommoduleNameimportfunctionNameasaliasFunctionName

#从包里直接加载类frompackageName.moduleNameimportclassName

#从包里直接加载函数frompackageName.moduleNameimportfunctionName

#直接加载包importpackageName1.3.3模块调用其中的类或函数使用句点法。加载方式不同,那么调用其中的类和函数的方式也会不同。如果直接加载到类或函数,则直接调用。无须带有包名或者模块名。如果加载到模块,调用其中的类或函数,则要带有模块名。示例代码如下:frompackageNameimportmoduleNamemoduleName.funtionName()#调用模块中的函数classfact=moduleName.className(args1,args2)#调用模块中的类如果直接加载包,则要写成:importpackNamepackageName.moduleName.funtionName()#调用模块中的函数classfact=packageName.moduleName.className(args1,args2)#调用模块中的类1.3.3模块下面自建一个简单的包文件,里面含有一个__init__.py文件和一个food.py文件。其中__init__.py可以什么内容都不填写,只是单纯证明这是一个可被加载调用的包。在food.py文件中编写一个模块,模块中含有一个类Fruit和一个函数inp()。文件夹内容如下:工作文件夹never_give_up:|-------包文件夹my__Package|---------__init__.py|---------food.py|-------main_.py文件下面开始在main_.py文件中加载food模块,调用其中的类和函数。Food模块如下:classFruit():#定义类def__init__(self,name):=namedefdecison(self,fruit11):self.fruitw=fruit11forfruitsinself.fruitw:iffruits=='orange':print("Youlivelifetothefullest!")else:pass

definp():#定义函数fruit2=[]foriinrange(0,4):xy=input()fruit2.append(xy)returnfruit21.3.3模块main_.py文件如下:frommy_Packageimportfoodastt#加载包中的food模块fruit11=tt.inp()#调用模块food中的函数inp()fruit_=tt.Fruit('Michael')#调用模块food中的类Fruitfruit_.decison(fruit11)#调用类中的函数decison()依次输入如下内容:Applemangoorangestrawberry输出结果如下:Youlivelifetothefullest!1.3.3模块除了自己定义的模块和包之外,Python官方还提供了许多内置的包和模块,这些被称为标准库。标准库是随Python解释器一同安装的,包含了许多功能强大的模块,帮助开发者完成各种常见的编程任务。例如,常用的标准库模块包括sys模块(用于访问Python解释器的参数和功能)、os模块(用于与操作系统进行交互)和math模块(提供数学计算功能)等。sys模块用来查看操作系统的信息,语法格式如下:importsysprint(sys.platform)1.3.3模块os模块获取当前文件所在目录,语法格式如下:importosprint(os.path.dirname(__file__))os获取当前当前路径以及切换当前路径,语法格式如下:importosprint(os.getcwd())os.chdir("c:\\")#切到C盘根目录print(os.getcwd())math模块提供了两个常量以及一些复杂的数学计算函数示例代码如下:importmathprint(math.pi)#圆周率piprint(math.e)#自然常数e输出如下:3.1415926535897932.7182818284590451.4图像界面设计图形用户界面概述图形用户界面(GraphicalUserInterface)是采用图形方式显示的计算机操作用户界面。它是一种一种人与计算机通信的界面显示格式,允许用户使用鼠标等输入设备操纵屏幕上的图形或菜单选项,以选择命令,调用文件,启动程序或执行一些其它的日常任务。与通过输入字符命令的字符界面相比,图像用户界面拥有许多优点和方便之处。图形用户界面由窗口,下拉菜单,对话框以及相应的控制部件等组成,在图形用户界面中,用户看到的和操作的都是图形对象。在Python开发GUI程序时,有许多GUI库可用,比如Tkinter、wxPython、PyQT、PySide等。像wxPython、PyQT等适合大型的GUI程序编写,Tkinter比较适合轻量级的GUI程序。Tkinter库是Python语言的内置GUI库,使用时直接导入即可,对于初学者比较方便。Tkinter是Python语言标准GUI工具包的接口,用于开发跨平台的GUI应用程序。它通过内部嵌入的Tcl解释器,将Python调用转化为Tcl命令,从而实现了快速创建GUI界面应用程序的功能。Tkinter本质上是Python封装的Tcl代码,通过Tcl解释器来执行,以支持GUI界面的创建和操作。1.4.2窗体容器和组件基于Tkinter模块创建GUI程序包含以下四个核心步骤。(1)创建应用程序主窗口对象fromtkinterimport*Root=Tk()(2)在主窗口中,添加可视化组件,如按钮(Button)、文本框(Label)等。bt01=Button(root)bt01["text"]=

"Helloworld"(3)通过几何布局管理器,管理组件大小和位置bt01.pack()(4) 事件处理。通过绑定事件处理程序,相应用户操作所触发的事件。defsay_hello(e):Messagebox.showinfo("Message","HelloUsers!")print("Helloworld")bt01.bind("<Button-1>",say_hello)1.4.2窗体容器和组件图形用户界面是一个个组件组成的,就像小孩搭建积木一样最终组成了整个界面,有的组件还能在里面放置其他组件,这样称之为容器。Tkinter的GUI组件继承关系图如图所示。从关系图可以看出,Object是所有类的根基类。在Object下包含有五种基类:Misc、Pack、Place、Grid、Wm。Misc它提供了可视化组件的基础功能,例如配置选项和方法,Wm主要提供了一些与窗口管理器通信有关的功能函数,Place、Pack、Grid则为布局管理器,管理组件大小、位置等。1.4.2窗体容器和组件在Misc中有一个重要的类是Widget,它包含了Tkinter模块所有的可视化组件。如图1-10是常见的Widget的可视化组件。通过Widget组件可以实现多种用户交互和界面设计需求,包括创建窗口、显示文本、处理用户输入、绘制图形、组织布局等。了解这些组件及其用途,有助于你选择合适的工具来构建应用程序的界面,并实现用户所需的功能。1.4.2窗体容器和组件在Tkinter中,可以使用geometry("wxh±x±y")方法来设置主窗口的位置和大小。这里的w代表窗口的宽度,h代表窗口的高度。+x表示窗口距离屏幕左边的距离,-x表示距离屏幕右边的距离,+y表示距离屏幕上边的距离,-y表示距离屏幕下边的距离。下面的代码为创建一个根窗口并设置其标题和尺寸的示例代码。fromtkinterimport*root=Tk()#调用Tk类,创建根窗口root.title("第一个GUI程序")#添加标题root.geometry("500x300+400+150")#定义窗口大小root.mainloop()#显示1.4.2窗体容器和组件下面的实例演示了为窗口添加组件,并为组件绑定事件的方法。fromtkinterimport*fromtkinterimportmessageboxdefsay_hello(e):messagebox.showinfo("Message","HelloUsers!")root=Tk()#调用Tk类,创建根窗口root.title("第一个GUI程序")#添加标题root.geometry("500x300+400+150")#定义窗口大小btn01=Button(root)#创建组件按钮btn01["text"]="click"btn01.pack()#调用布局管理器btn01.bind("<Button-1>",say_hello)#绑定事件root.mainloop()单击click按钮,结果如下:1.4.2窗体容器和组件下面使用面向对象的方式写一个简单的GUI程序。fromtkinterimport*fromtkinterimportmessageboxclassApplication(Frame):def__init__(self,master):super().__init__(master)self.master=masterself.creatwidgets1()self.pack()defcreatwidgets1(self):globalphotophoto=PhotoImage(file='sea_1.gif')self.label01=Label(self,image=photo)self.label01.pack()self.label02=Label(self,text="beautifulsea\n美丽的海景",fg="blue",bg="yellow",width=20,height=2,font=("微软雅黑",18),justify=CENTER)self.label02.pack()self.btn=Button(self,text="click",fg="

white",bg="green",font=("微软雅黑",14),width=8,height=2,command=self.write__)self.btn.pack()defwrite__(self):messagebox.showinfo("write","HelloSea!")root=Tk()root.geometry("500x350+400+150")root

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论