购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.3 Python基础语法

本节将结合不同学科中的基础知识介绍Python的基础语法。

3.3.1 认识Python的工作方式

Python可以被视为一个在开发者和计算机沟通时进行协调的“中间人”,如图3-20所示。

图3-20 Python在开发者和计算机沟通时进行协调

图3-20中各处标识的说明如下。

(1)标识1:Python的运行环境是各操作系统,需要在操作系统的管理下运行。

(2)标识2:开发者通过输入、输出设备与Python进行沟通,其中鼠标、键盘、显示器是最常见的输入、输出设备。

(3)标识3:Python将开发者通过输入设备输入的代码用解释器翻译给计算机执行。

(4)标识4:Python通过pip、easy_install等工具从互联网上下载不同功能的包。

(5)标识5:导入Python模块和包中的功能用于完成不同的操作。

通过上面的说明,我们认识到不应该以单一的视角看待Python。以不同的视角看待一个事物,会有不同的思维方式与学习方法。本书的视角是:以面向对象的方式认识Python,将Python视为一个“中间人”,它与开发者、计算机、互联网、操作系统都有关联。我们学习的重点是Python与开发者的沟通方式,即接下来要介绍的Python语法。

3.3.2 基础语法——Python的独特“口音”

Python被视为一个“中间人”,通过特定的语言与开发者沟通。本小节将对Python语言中最基本的知识点进行说明。

1.空格的缩进

空格的缩进方式是Python语法中最有特色的一部分,往往也是初学者实践时最容易忽略的知识点。需要缩进4个空格的语法包括:条件判断、循环处理、定义函数、定义类。以下代码为在IDLE中演示缩进空格错误的提示信息,读者可对其进行修改,以输出正确信息。

2.保留关键字

保留关键字是Python语言中一些已经被赋予特定意义的单词,以下代码为在IDLE中查看保留关键字并测试对保留关键字赋值会引发何种错误。

3.特殊符号

Python语言中有用于表示特定逻辑的特殊符号,特殊符号可分为3类,如表3-1所示。

表3-1 特殊符号说明

转义符用反斜杠“\”表示,以下代码为在Jupyter QT Concole控制台中使用转义符的各种场景的说明。在Anaconda Powershell Prompt中输入“jupyter qtconcole”命令即可打开Jupyter QT Concole。

4.注释

注释语句是给开发者查看的,不会被Python解释器执行,注释的符号是“#”或三个引号,演示代码如下。

3.3.3 变量与类型——角色扮演

本小节将介绍变量的创建和使用方式。在Python中变量像是一个演员,可以扮演各种不同类型的数据。在学习Python变量的同时,读者可以将其与Excel中的数据类型进行对比,以达到更好的学习效果。

1.定义变量的方式

在Python中,对变量定义、赋值时不需要声明类型,但需要遵守一定的命名规则。具体规则主要包括3项:不能使用保留关键字,不能以数字开头,不能包含空格。需要注意Python中的变量是区分大小写的,如a和A是两个不同的变量。

2.可使用的数据类型

变量可以扮演不同类型的数据,表3-2所示为Python中的数据类型。

表3-2 Python中的数据类型

以下代码中使用了各种不同的数据类型,需要明确的是Python中变量类型是根据等号右边的数据类型决定的。

3.数据类型的查看与转换

变量的数据类型是可以转换的,以下代码演示了常用数据类型的转换方式。

以上演示代码中转换数据类型时,只是返回转换类型后的数据,并不会改变原变量类型。可以通过isinstance函数和type函数验证变量的类型,演示代码如下。

4.Python与Excel的数据类型对比

在学习了Python变量与数据类型后,可以将其与Excel中的数据类型进行对比,以在后续章节中进行数据处理分析时有更深刻的理解,如表3-3所示。

表3-3 Python与Excel的数据类型对比

3.3.4 运算符——算术演示

Python通过运算符进行各种运算,本小节介绍Python中的4类运算,分别是算术运算、比较运算、赋值运算、逻辑运算。

1.算术运算

包括加、减、乘、除等运算,以下演示代码在JupyterLab开发环境中运行,读者可参考本书代码素材文件“3-1-运算符.ipynb”进行学习。

2.比较运算

通过比较运算可以对相同类型的数据进行比较。需要注意区分“==”和“=”的使用场景,前者用于比较,后者用于赋值。比较运算的返回结果是布尔类型数据,即结果只有True与False两种可能。

3.赋值运算

前文的代码中多次使用了等号对变量赋值,Python中还有很多其他赋值运算符能够完成更多的赋值操作,最常见的是将算术运算符和等号组合使用。

4.逻辑运算

逻辑运算包括与、或、非,常结合条件判断语句使用,Python中的逻辑运算说明如表3-4所示。

表3-4 Python中的逻辑运算说明

下面在JupyterLab开发环境中演示使用bool函数对不同类型的数据进行转换,转换的结果用于确定不同数据类型对应的布尔值。

5.Python与Excel中的运算符对比

在Python和Excel中进行相同的运算时使用的运算符有差异,表3-5所示为Python与Excel中的运算符对比。

表3-5 Python与Excel中的运算符对比

3.3.5 字符串操作——以语文实例演示

本小节介绍Python中的字符串操作。读者在学习过程中可以将Python与Excel的字符串操作进行对比,可参考本书代码素材文件“3-2-字符串操作.ipynb”进行学习。

1.字符与字符串的表示

在Python中可使用单引号、双引号、三引号定义字符类型。字符串由多个字符构成,因此可以对单个字符进行索引,演示代码如下。

str1字符串中包含11个字符,正向索引(从左向右)从0开始,逆向索引(从右向左)从-1开始,如图3-21所示。str1[4]和str1[-7]索引的是相同位置,对应字符为“o”。

图3-21 Python字符串索引

2.以语文实例演示字符串操作

下面以《静夜思》为例演示字符串操作,读者需学会使用操作文档,查找需要的功能。

在Python中可使用%操作符与format函数对字符串进行格式化。在Python早期版本中使用%操作符格式化字符串,Python 2.6版本中新增了format函数。若无版本原因,建议使用format函数对字符串进行格式化。

以上代码中只使用了少量的字符串操作函数,读者可通过查询Python操作文档学习更多字符串操作函数。打开Python操作文档,定位到“The Python Standard Library”→“Built-in Types”→“Text Sequence Type”→“String Methods”文档,如图3-22所示,该文档对字符串操作函数进行了详细的说明与演示。

图3-22 Python操作文档

3.3.6 条件控制——以物理实例演示

本小节介绍Python中的条件控制。条件控制是编程的基础知识点之一,本例通过条件控制模拟物理中水的3态变化,读者可参考本书代码素材文件“3-3-条件控制.ipynb”进行学习。

1.条件控制的关键字与符号

条件控制的关键字有if、else、elif,这些关键字语句以冒号“:”结尾,对应的语句块要缩进4个空格。条件控制对应的中文表述类似“如果……就……”,以下代码为条件控制的基础演示。

2.以物理实例演示条件控制

物理中水有3种状态,分别是固态、液态、气态。水的3种状态在温度、气压达到临界值时会互相转化。下面通过代码模拟在标准大气压下,水的3种状态随温度的变化。

3.3.7 循环控制——以数学实例演示

在Python中可以通过循环控制处理一些重复的操作,循环控制和条件控制在某些情况下是互通的。本小节以数学中水池排水、注水问题和九九乘法口诀表为例演示循环控制,读者可参考本书代码素材文件“3-4-循环控制.ipynb”进行学习。

1.循环控制的关键字与符号

循环控制的关键字有while、for……in、break、pass等,关键字语句以冒号“:”结尾。循环控制对应的中文表述类似“直到……就……”。

2.以数学实例演示循环控制

数学中有一个经典的水池问题:水池有注水口、排水口,同时进行注水与排水但速度不一样,问将水排干需要多少时间。在这个问题中有2个判断条件:排水速度大于注水速度才能计算将水排干需要的时间;水池中水被排干就停止注水和排水。下面通过代码计算水池排水、注水问题。

以下代码演示了使用循环控制输出九九乘法口诀表,print函数中的end参数用于设置输出文本的结尾内容,赋值转义符\t用于横向制表。

3.3.8 GUI编程——以美术实例演示

介绍GUI编程,一方面是为了介绍图形用户界面与素材资源等概念,另一方面可以对前面几个小节中的知识点进行汇总复习。本小节中使用Python自带的GUI包Tkinter编写GUI程序,读者可参考本书代码素材文件“3-5-gui编程.ipynb”进行学习。

1.什么是GUI编程

GUI是Graphical User Interface的缩写,即图形用户界面。GUI程序提供可视化的操作界面,如Excel就是一款GUI程序。GUI编程就是编写图形操作应用程序,Python中自带一个GUI包Tkinter,其基础使用方法的演示代码如下。

演示代码中变量root表示整个窗口,变量my_button表示按钮,通过pack函数将按钮关联到主窗口中,mainloop函数用于消息监听,运行代码得到的程序界面如图3-23所示。

图3-23 GUI程序的界面

2.资源的加载

编程中使用的图片、音频、视频等文件是外部资源,这些外部资源可以让程序的内容更加丰富且容易使用。外部资源的类型有很多,加载使用的方式也有差异。以下代码演示了在GUI编程中加载外部资源的操作,最终GUI程序的样式如图3-24所示。

图3-24 在GUI编程中加载外部资源

3.知识点汇总示例

下面将本章各小节中介绍的Python语法知识应用到GUI编程中,通过可视化的操作加深对Python语法的理解。以下代码演示了通过Tkinter制作一个计算器程序的界面,读者可参考本书代码素材文件“3-6-计算器.ipynb”进行学习。

(1)首先构建Tkinter主窗口,设置窗口的大小、标题等。

(2)定义“算术运算符”按钮变量,并设置控件在主窗口中的位置与显示的信息。

(3)定义“逻辑运算关键字”按钮变量,并以字符串遍历方式分配控件显示值。

(4)将数字0~9通过循环控制添加到主界面中。

经过以上4步操作后,得到的GUI程序界面如图3-25所示,在构建GUI界面时使用了变量定义、算术运算符、逻辑运算符、字符串索引、循环控制、条件判断等Python基础语法。在介绍完Python函数相关知识后,将对该计算器程序进行完善。

图3-25 Tkinter计算器界面

3.3.9 复合数据类型——以地理实例演示

Python中常用的复合数据类型有元组、列表、字典,读者可参考本书代码素材文件“3-7-复合数据类型.ipynb”进行学习。

1.认识复合数据类型

Python中常用的复合数据类型如表3-6所示,需注意构建各种类型的关键字与符号。

表3-6 Python复合数据类型

(1)首先演示元组的定义及基础操作,需要注意的是元组中的元素值是不可改变的。

(2)以下代码演示了列表的定义和基础操作。

元组与列表的最大差别是列表中元素的值可以改变,因此支持的操作也更多。

(3)以下代码演示了字典的定义和操作。

字典和元组、列表的最大差别为,字典中元素由两部分构成,分别称为键和值,键和值以冒号分隔,格式为{key1:value1,key2:value2}。

2.以地理实例演示

地理学中会用数据描绘地表环境特征,下面使用复合数据类型表示国内五大河流的长度数据,五大河流分别为长江、黄河、黑龙江、珠江、澜沧江。

(1)使用2个元组变量分别表示各河流的名称和长度。

输出结果如图3-26所示,图中第3列中一个星号表示100千米,星号的个数体现了河流的长度。元组的特点是无法改变其中的数据,而河流的长度在短期内不会有很大变化,因此使用元组变量较为合适。

图3-26 使用元组变量表示河流数据

(2)使用2个列表变量分别表示各河流的名称和长度。

列表与元组的最大差别是列表中的元素可以修改,使用列表变量可以添加国内其他河流数据。

(3)使用字典表示河流参数,进行更加灵活的统计。

上一步中定义了元素是元组的列表,减少了需要维护的数据,操作也更方便。通过字典也能达到同样的效果。

演示使用元组、列表、字典存储和处理河流数据,一方面表明了各学科中的数据使用Python进行处理是比较简单的,这也是Python能在数据科学中脱颖而出的原因;另一方面验证了元组、列表、字典中的元素也可以是复合数据类型,这样就能组合出更多的数据结构类型,完成更加复杂的数据操作。

3.3.10 函数——以化学实例演示

Python中的函数是组织好的、可重复使用的逻辑单元,函数与化学反应有点像,在特定的条件下二者都有输入和输出。读者可参考本书代码素材文件“3-8-函数.ipynb”进行学习。

1.函数的定义方法

在Python中定义函数只需要遵循以下5项规则即可。

(1)函数代码块以def关键词开头,后接函数名称和圆括号()。

(2)任何传入参数和自变量都必须放在上一步的圆括号()中。

(3)函数的第一行语句可以是文档字符串,作为函数的说明。

(4)函数语句块以冒号开始,且需要缩进。

(5)return[表达式]返回一个值给调用者,但return语句并不是必需的。

2.函数的调用方法

函数的调用方法非常简单,输入函数名后传入需要的参数即可。

3.使用函数演示化学反应

以下代码通过函数演示化学反应——氢气的燃烧、碳的燃烧。

4.完善计算器程序

3.3.8小节中介绍GUI编程时制作了计算器程序界面,下面为计算器程序添加处理逻辑,单击GUI程序窗口中的按钮即会执行相应的回调函数。读者可参考本书代码素材文件“3-9-计算器回调函数.ipynb”进行学习。

完善后的GUI计算器程序的操作界面如图3-27所示。读者可以根据自己的需求,将Python中的各种基础运算语法扩展到该程序上。

图3-27 完善后的GUI计算器程序操作界面

3.3.11 类——时间对象的演示

以不同的视角看待一个事物,会有不同的思维方式与学习方法,3.3.10小节中介绍的函数属于面向过程的编程方式——将要实现的需求拆分为不同步骤,然后使用函数按步骤处理。本小节介绍Python的面向对象编程方式,创建Python类就是创建新的对象类型,可以将数据与功能封装在一起。

1.定义类的方法

使用class关键字定义类,class之后是类的名称,以冒号结尾,然后在类语句块中定义属性和方法。以下代码演示了最简单的类的定义和使用方法。

类可以简单理解为属性和方法的集合体。类的相关概念说明如表3-7所示。

表3-7 类的相关概念

2.类的继承

面向对象程序设计中最重要的一个概念是继承,继承允许我们依据一个已有类来定义一个新类,有利于实现功能复用、动态性等。图3-28所示为Python操作文档中对自带的日期时间相关类的继承说明。接下来将对图中的类的继承进行简单说明,然后进行代码实践,读者可参考本书代码素材文件“3-10-类的操作.ipynb”进行学习。

图3-28 Python日期时间相关类

(1)object类说明。

object类是Python 3中的基类,图3-29展示了object类的定义,需要注意的是object类中的方法都是以两个下划线开始和结束的。__init__()方法是特殊方法,在实例化类对象时会被自动调用。

图3-29 Python中object类的定义

(2)date类说明。

date类用于表示日期,即由年、月、日组成的对象。date类在Python系统模块datetime中定义,以下代码为源码片段,虽然代码中date类没有显示从object类继承,但date类默认继承object类中的方法、属性。

以下代码中使用date类调用以上源码中介绍的基础类属性、类方法。

(3)datetime类说明。

datetime类是时间对象,datetime类从date类继承year、month、day等方法,因此这些方法也可以在datetime类实例中调用。datetime类在Python系统模块datetime.py中定义的源码片段如下。

通过以上源码片段可以发现datetime类是从date类继承的,以下代码演示了调用datetime类中的属性和方法。

3.3.12 包和模块

前面几个小节中介绍了使用变量与各种操作符进行简单的逻辑处理,通过函数将功能封装以复用功能,通过类将变量和函数集成以完成更高层次的封装。接下来将要介绍的包和模块可以将类、函数、变量都集成在一起。读者可参考本书代码素材文件夹“3-10-模块和包”中的代码进行学习。

1.模块的介绍

模块是一个文件,文件名就是模块的名称。在模块中可以定义变量、函数、类等对象,然后使用import导出使用模块中的对象。以下代码演示的操作为创建一个birthday模块,在模块中定义一个名为is_my_birthday的函数,传入的函数参数是生日日期,在函数体中判断传入的生日日期是否为今天。在call.py模块中调用birthday模块中的功能。

2.包的介绍

包是一个文件夹,文件夹名就是包名。包中需要有一个名为“__init__.py”的文件,该文件中可以没有内容。将上面创建的birthday模块调整为新建包中模块的操作步骤为:在call.py文件所在的文件夹下新建一个名为“package”的文件夹,在package文件夹中新建名为“__init__.py”的文件,然后将birthday.py文件拷贝到package文件夹中。对call.py文件的内容进行修改,用于调用package包中birthday模块的功能。

3.3.13 主要的数据科学包

本小节将对Python中主要的数据科学包进行介绍,包括NumPy、Pandas、SciPy、Matplotlib、Bokeh、scikit-learn包。表3-8所示为各数据科学包的说明与对应的Excel中的功能。

表3-8 Python数据科学包

1.NumPy数组对象相关操作

NumPy包提供了一个强大的N维数组对象,以下代码演示如何使用NumPy包的数组对象。

2.Pandas DataFrame数据结构

Pandas包是在NumPy包的基础上构建的,Pandas包中的Series、DataFrame、Panel数据类型用于处理不同维度的数据,其中DataFrame是表格型的数据结构,也是最常使用的数据类型,表3-9所示为DataFrame数据索引方式的说明。

表3-9 DataFrame数据的索引方式

以下代码为表3-9中介绍的DataFrame数据索引方式的操作演示。

3.Matplotlib绘图方式

Matplotlib有3种绘图方式,分别是使用pyplot模块、使用pylab模块、以Python面向对象编程。在演示使用Matplotlib绘图前,先对Matplotlib的一些概念进行说明,如表3-10所示。

表3-10 Matplotlib中的主要对象

以下代码演示了表3-10中介绍的Matplotlib对象的创建和操作,注意在Matplotlib的绘制图中找到表3-10中对象对应的区域及它们的包含关系。

(1)创建一个包含4个Axes对象的Figure对象,可以使用add_subplot函数或subplots函数完成。

(2)在第一个Axes对象上调用plot方法绘图。

(3)在第二、三、四个Axes对象上分别调用hist、errorbar、pie方法绘制直方图、误差条形图、饼图。

最终绘制出的可视化图如图3-30所示,整个图对应代码中创建的Figure对象fig。图被分为4个部分,对应代码中创建的4个Axes对象ax1、ax2、ax3、ax4。

图3-30 Matplotlib可视化

4.Bokeh绘图方式

Bokeh是一个能与Web浏览器交互的可视化库,提供通用的数据可视化图,具有良好的交互性,主要操作步骤如下。

(1)通过ColumnDataSource类构建要可视化的数据。

Bokeh将接收的数据转换为ColumnDataSource类型,然后再进行可视化。单独构建ColumnDataSource对象时传入的数据可以是Python字典或Pandas DataFrame类型数据。

(2)使用figure函数创建整个绘图对象。

使用figure函数创建整个绘图对象,参数title用于设置图表的标题,参数x_axis_label用于设置X轴的名称,参数y_axis_label用于设置Y轴的名称,函数返回Figure类型对象。

(3)在Figure类型对象上绘制不同的图表。

Bokeh支持最常用的图表,如可以使用line函数绘制线段图,使用circle函数绘制散点图,使用vbar函数绘制柱形图。

(4)为图表添加动态交互功能。

Bokeh支持图表的动态交互,在Bokeh中可以使用小工具进行数据交互。

(5)图表的展示或保存。

使用show函数可以展示图表,使用output_file函数可以保存图表。

上述5个步骤的操作演示代码如下。

执行以上代码后,绘制的交互式散点图如图3-31所示。使用图中标识1处的小工具可以调整散点图的大小。

图3-31 Bokeh交互式绘图

3.3.14 数据库操作

Python对除SQLite外的数据库都需要安装对应的驱动包才能操作。以下代码演示了对SQLite数据库的操作,读者可参考本书代码素材文件“3-17-sqlite.ipyb”进行学习。

(1)连接SQLite数据库。

(2)使用CREATE TABLE……语句创建表。

(3)使用INSERT INTO TABLE……语句向表中插入数据。

(4)使用SELECT……FROM……语句查询数据。 ZbGEcTlGxXfvLLnFf9ab91GJSZYJk79U4A2XkjNSlI17pZRuU1SJevul7t8Yb8ae

点击中间区域
呼出菜单
上一章
目录
下一章
×