昆仑子牙练AI:人工智能从开发到实战
上QQ阅读APP看书,第一时间看更新

Python基础知识

我们在做人工智能研究的时候,最常用的计算机编程语言便是Python,它使用起来简单、方便,还提供了强大的数据处理功能,对于初学者也十分友好。下面我们就对Python的基础内容进行介绍。

更多的Python教程请参考:https://docs.python.org/zh-cn/3/tutorial/index.html

Python的基本数据类型

如果想让计算机程序帮助我们实现一系列操作,必不可少的东西就是数据,那么Python中有哪些数据呢?在我们日常处理的数据中,有整数、小数、文字,还有这些数据的组合,这些都是Python的基本数据类型,其中:

1)整数与小数(即浮点数)统称为数字,比如:5、10.001、1e-5、123 484 657 456 476等。

2)文字类型的数据称为字符串,比如'''哪吒比较贪玩'''、"""哪吒来自钱塘江"""、'good morning'、"hello world"等。在Python中,每个字符串都需要用引号包裹起来,如上述示例所示,可以用单引号、双引号,也可以用三个单引号、三个双引号,但是一定要注意配对使用。

3)组合类型的数据一般包括列表、元组、字典。

·列表是指将一系列数据放在一个中括号里,构成一个包含多个元素的数据类型,比如[1,2,3,4,5,6]是一个长度为6的数字类型的列表、['hello world','good','enjoy']是一个长度为3的字符串类型的列表、['hello world',1,2,3,4,5]是一个长度为6的混合类型的列表。由此可以发现,一个列表中的数据类型是不固定的,也可以是不相同的。这里需要注意的是,每一个列表中的第一个元素对应的下标都是从0开始!

·元组是将一系列数据放在一个小括号里,括号里面的数据类型也可以不同,比如('hello world',1,2.23,70.2)、(123,'123')等,元组中第一个元素的起始下标也是0,大家现在可以尝试使用“第0个元素”来养成这个习惯。大家可以观察到,列表和元组这两种组合类型的数据都是有序的,也就是说,可以通过访问第一个元素、第k个元素获取列表或元组中相应下标位置的元素。

·字典是一个无序的组合数据类型,也就是说,我们无法通过一个下标获取对应位置的元素。但是,字典是一种十分灵活的数据类型,它通过“键”来访问每一个元素。我们一般将字典用一个花括号包裹起来,里面的每个元素都分为两部分:键和值。比如,在dict={'姜子牙':65,'宋异人':65,'元始天尊':1000}这个字典里,冒号前面的部分称为“键”,冒号后面的数字代表“键”的“值”。当然,键可以是数字类型,也可以是字符串,而值可以是任意类型的数据。显然,“键”是唯一确定的,即一个字典里面不能有重复的键,但是可以出现重复的值。当我们想要获得宋异人的年龄时,可以使用命令dict['宋异人'],该操作会返回宋异人的年龄:65。

Python的基础运算

使用计算机编程语言时,就是输入一系列数据,让计算机帮我们完成相关的计算任务,那么Python包含哪些运算呢?我们现在介绍的运算可能与传统数学中的运算有所不同,大家一定要注意区分哦!

(1)赋值运算

所谓赋值运算,就是将一个值赋予某个变量,比如x=7的意思是给变量x赋值7。这与数学中的“=”不同,计算机编程语言中的“=”代表将等号右边的值赋给等号左边的变量。因此,你可能会发现,在计算机程序中,我们经常使用与x=x+7类似的表达方式,它代表将x+7的值重新赋值给x,而不是像数学中那样解方程得到x=0。在Python中,我们直接使用赋值运算来定义某个变量,而无须说明其数据类型,Python解释器会根据赋值的情况自动判断其所属的数据类型。

(2)算术运算

算术运算就是我们平常用到的+、-、*、/、%、**和//,它们分别代表加法、减法、乘法、除法、除法取余数、幂运算以及除法取整数。比如,7/2=3.5,结果为浮点类型;7%2=1,余数可为整数或浮点数(3.4%2=1.4);7//2=3,取整结果一定为整数;2**3=8,即幂运算。

(3)比较运算

顾名思义,比较运算是指比较两个数的大小或者比较两个字符串在字典中的前后顺序,主要包括==、!=、>、<、>=、<=,分别代表相等、不等、大于、小于、大于等于、小于等于。其中,==判断两个数据是否相等,如:a=1、b=2,语句a==b会返回False,代表两者不相等;语句a!=b则会返回True,表示两者不相等成立。

知识点

Bool型:在Python中还有一种特殊的数据类型——Bool(布尔)型。它只有两个取值True和False,分别表示真和假(对和错)。

(4)高级运算

更高级的运算包括逻辑运算、位运算、成员运算、身份运算等,我们此处不做详细介绍,有兴趣的读者可以自行查阅相关文档。

现在,我们已经了解了Python中基本的数据类型与运算,作为所有编程语言中最重要、最基础的部分,这些是需要我们牢牢掌握的,后面所有的操作都是在这些数据及运算上进行的。对这部分内容,小伙伴们一定要用心学习哦!

Python的基础语法

前面介绍了Python中的基本数据类型与运算,接下来我们就要真枪实弹地学习如何将上面的数据结构组合起来,构成一段可以执行的代码了。就像英语一样,Python作为一种编程语言,也有它的语法结构,这种语法告诉我们应该如何规范地书写代码,代码才能被计算机正确无误地执行以得到相应的结果。

Python是一种脚本语言,你无须编写一个代码文件,而是直接在Python解释器中输入相应的操作,就可以顺利执行。如图2-2所示,我们直接在安装了Python的Windows下执行下述Python命令,便可得到相应的结果。图2-2中的Python命令的作用是,指定变量a为一个字符串,被赋值为'hello world',print(a)打印a的取值。

图2-2 在Windows终端直接执行Python命令

知识点

Print是Python中用于输出的命令,通过Print可以将需要的数据显示出来。

虽然上面的脚本很方便,但是当我们需要大量的代码时,使用命令行直接操作是非常烦琐的,因此可以将很多行代码写入一个或多个文件中,按顺序执行代码。我们将每一个脚本文件命名为file_name.py,即后缀名为.py,编写完代码后,执行python file_name.py命令,文件中的代码便会依次被执行。下面我们看一些基本的语法,包括行与缩进、输入与输出、注释、条件语句、循环语句、函数等。

(1)行与缩进

Python中,一行代码通常代表一个操作或者一个执行命令,在同一个模块中的代码,行首要对齐,每个模块内部要有四个空格的缩进。如图2-3所示,第2~4行中每行都是一个单独的模块,因此行首对齐;而第7~10行代码中,由于第8~10行为模块的内部,因此相对于第7行有四个字符的缩进。Python利用对齐与缩进来标识不同的模块,这是我们在编程过程中尤其需要注意的。

图2-3 行与缩进代码演示

(2)输入与输出

Python使用input()函数从控制台读取一个输入,使用print()函数进行输出。如图2-4所示,input()函数内部的文字用于进行输入提示,Python 3默认输入的数据类型为字符串,第1行表示将输入的字符串赋值给变量s,print(s)表示将s的值进行输出。可以同时输出多个变量值,比如调用print(s,s,s,s)可以将s输出四次。

图2-4 输入与输出代码演示

(3)注释

所谓注释,就是一些说明性的文字。注释不是程序所执行的命令,而是作为一些功能的备注。比如,图2-3中的第8行与第13行就是注释,这两行注释说明了两个函数的功能。Python中有几种注释形式,“#”一次只能注释一行,若想添加多行注释,可在每行开头都用“#”进行标识,也可以像图2-3中第8行和第13行那样用三个单引号或双引号进行注释。注释的位置比较灵活,但是为了使代码整体风格整洁、可读性强,一般是在有需要的位置注释,并且要遵循缩进等规范。

(4)条件语句

条件语句用于判断某个条件是否为真,为真或者为假时会采取不同的处理方法。条件语句的语法格式为“if判断条件:执行操作1,else:执行操作2”。如图2-5所示,a[0]=1,当执行if a[0]==10时,表示判断列表a中的第0个元素是否等于10,如果相等的话输出“The expression is true!”(该表达式为真!),否则输出“The expression is false!”(该表达式为假!)。还有比较复杂的情况,比如条件表达式len(a)>0 and a[0]==10,这个表达式首先会判断列表a的长度是否大于0,如果大于0,再判断后面的条件是否成立。若长度等于0,意味着第一个条件不成立,那么第二个条件也不需要判断了,因为只有在两个条件同时成立时整个条件语句才能为真,只要有一个条件不为真,那么整个表达式就为假。再比如表达式len(a)>0 or a[0]==10,or表示这两个条件只要有一个为真,那么整个表达式就为真,只有两个条件全为假时,整个表达式才为假。

图2-5 条件语句代码演示

(5)循环语句

循环语句是指我们多次重复执行一段代码,常用的循环语句为for语句。如图2-6所示,我们想一次输出列表中的所有元素,有两种方法:第一种方法如第3~4行代码所示,表示对列表a中的每个number,依次输出其值;第二种方法如第6~7行代码所示,我们首先使用len(a)获得列表a的长度,然后使用range(len(a))生成一个整数索引区间[0,1,2,…,len(a)-1],里面的数分别代表a中每个元素的下标,我们从前往后遍历这些下标,用a[i]输出第i个位置的元素值。

当我们使用循环时,有时候根据判断条件需要跳过当前循环步或者直接终止循环,这时应该怎么做呢?很简单,如果满足某个条件,则使用continue关键字可跳出当前步,继续下一步;使用break关键字可直接终止循环操作,继续执行循环语句后面的代码。如图2-7所示,循环最终只会输出1、2、4三个数字。

图2-6 循环语句代码演示

图2-7 continue/break代码演示

(6)函数

计算机编程语言中的函数用于将可复用的代码封装在一起,以便在多次使用该函数时,无须一次次重复编写同样的代码。比如,我们需要计算一个复杂的表达式:当x<0时,y=x2+1;而当x≥0时,y=x2-1。我们可能有很多不同的输入x,因此在实现代码时,可以将这个复杂的计算过程封装为一个函数,只要将x传入函数中,就可以得到相应的y。如图2-8所示,我们首先将计算过程放在get_result(x)函数里面,其中get_result为函数名,x为参数,在函数体中会用到这个参数。return表示返回,若没有返回值则可省略不写,若有返回值,则return后面跟返回的值,此时返回计算结果。第11行代码遍历a中的元素,循环调用该函数,并将返回的结果赋值给变量y。

图2-8 函数代码演示