2.5 人工智能的编程语言——Python
本节不是讲Python语言,而是理解人工智能也需要编程,了解Python语言编程优势,想学习Python的请看相关课程。
2.5.1 面向对象编程思想
1.面向对象要素
图2-21给出了面向对象的要素示意图。
图2-21 面向对象要素
1)对象:凡是具有状态和行为的实体皆为对象;如张三、李四等。
2)类:创建一类具有相同特征的对象的模板,是计算机中对于对象的抽象;如人、老师、学生等。
3)属性:属性对应着对象的状态,是计算机中表示对象状态的数据结构;如年龄、性别、职业等。
4)方法:方法对应着对象的行为,是计算机对对象行为的一种抽象,是处理业务逻辑的关键所在。
5)封装:封装就是把属性和方法封装到一个类中,通过方法来修改和执行业务,有利于后期的修改和维护。
6)继承:继承的主要目的是实现方法的多态性和代码的可重用性。张三的“姓名”“年龄”就是对父类属性的继承。
7)多态:多态就是一个对象对应着不同类型,根据不同的条件,做出对应的动作;如张三的喜怒哀乐。
2.真正的面向对象编程思想是怎样的?
1)面向对象编程思想就是忘掉一切关于计算机的东西,从问题领域考虑问题,即忘掉语言本身,只有逻辑。
2)将分析过程看作抽象的过程,简言之,把大的问题分成多个小问题(组成部分),直到无法再细分。
3)对每个对象(小问题)进行分析、抽象,提取出共同的内容(成员和方法)。
4)由相似的对象构造基类;再由基类派生出各个子类(小问题)。
5)解决问题的过程就是操作这些对象的过程。
6)面向对象技术的出现是因为软件的规模和复杂度不断扩大,导致了软件开发的危机。人们认识到人脑的分析和理解问题的模式类似面向对象。
7)了解系统的功能。列举出它的对外接口,即对于使用者来说它有什么功能,把整个系统作为一个对象。
8)面向对象包括两个思想:从大往小想,从小往大做;从难往易想,从易往难做。
9)现实中的一切都是对象,它们有分类,就产生了“类”;同一个类中不同的对象的区别,使用成员区分。
10)面向对象是一种思维方式,即使用计算机语言描述现实世界的一种方式,以所感兴趣的实体为对象,通过一定的数据结构和类型来描述该实体。
11)面向对象编程思想就是把要解决问题中涉及的实体一个一个分析清楚,找出彼此之间的差异和共同点,以及相互之间的联系。对于共性的实体就定义成父类,在父类的基础上再进行分析,直到描述了每个实体。
12)面向对象编程思想的一个重要特征是继承。所以,有对象而没继承的只能叫基于对象,只有有了继承才能叫面向对象。简单地说,一个程序模块不需要原程序员的解释,另一个程序员就可以进行二次开发,这就是对象封装成功了。
2.5.2 学习Python的理由
如果想要进入人工智能领域从事研究,学习Python是最佳选择,因为它有强大的API和可用于人工智能、数据科学和机器学习的库。
1.提供了多种框架
Python提供了机器学习PyBrain、数值计算NumPy和数据库管理PyMySQL等多种框架;使用Python的另一个原因是多样性,Python相比任何其他语言允许做更多的事情,例如可以创建脚本来自动化内容,进行Web开发等。
2.面向对象方式简单化
Python既支持面向过程的编程,也支持面向对象的编程。在“面向对象”的语言中,程序是由数据和功能组合而成的对象构建起来的。与其他主要的程序语言相比,Python以一种非常强大而又简单的方式实现面向对象编程。
2.5.3 Python的核心语法
1.语句和语法
1)#:注释。
2)\:转义回车,续行,在一行语句较长的情况下可以使用其来切分成多行,因其可读性差所以不建议使用。
3);:将两个语句连接到一行,可读性差,不建议使用。
4)::将代码的头和体分开。
5)语句(代码块)用缩进方式体现不同的代码级别,建议采用4个空格(不要使用Tab)。
6)Python文件以模块的方式组织,模块实际上就是以.py结尾的文件。
2.变量定义与赋值
1)Python为动态语言,变量及其类型均无须事先声明类型。
2)变量必须先赋值,才可使用。
3.标识符
1)定义:标识符指允许作为名字的有效字符串集合。
2)名字必须有实际意义,可读性好。
3)首字母必须是字母或下划线(_)。
4)剩下的字符可以是字母和数字或者下划线。
5)标识符名称大小写敏感。
6)标识符不能使用关键字或内建函数。
4.数据结构
(1)列表list
1)列表中的每个元素都是可变的,意味着可以对每个元素进行修改和删除。
2)列表是有序的,每个元素的位置是确定的,可以用索引去访问每个元素。
3)列表中的元素可以是Python中的任何对象,如字符串、整数、元组等。
(2)元组tuple
元组可以理解为一个固定的列表,一旦初始化其中的元素便不可修改,只能对元素进行查询。
(3)字典dict
字典这个概念是基于现实生活中的字典原型,生活中使用名称-内容对数据进行构建,Python中使用键(key)-值(value)存储。
1)键不可重复,值可重复。键若重复则字典中只会记该键对应的最后一个值。
2)字典中键(key)是不可变的,为不可变对象,不能进行修改;而值(value)是可以修改的,可以是任何对象。
(4)集合set
集合更接近数学上集合的概念。集合中每个元素都是无序的、不重复的任意对象。可以通过集合去判断数据的从属关系,也可以通过集合把数据结构中重复的元素减掉。集合可做集合运算,也可添加和删除元素。
5.第三方包
(1)Numpy(数值运算库)
Numpy库支持在多维数据上的数学运算,提供数字支持以及相应高效的处理函数,很多更高级的扩展库(包括Scipy、Matplotlib、Pandas等库都依赖于Numpy库)。
(2)Scipy(科学计算库)
Scipy库提供矩阵支持,以及矩阵相关的数值计算模块,其功能包含最优化、线性代数、积分、插值、拟合、信号处理和图像处理以及其他科学工程中常用的计算。
(3)Matplotlib(基础可视化库)
Matplotlib库提供强大的数据可视化工具以及作图库,其主要用于二维绘图,也可以进行简单的三维绘图。
(4)Pandas(数据分析库)
Pandas用于管理数据集,其强大、灵活的数据分析和探索工具,带有丰富的数据处理函数,支持序列分析功能,支持灵活处理缺失数据等。
1)Pandas基本的数据结构是Series和DataFrame。
2)Series就是序列,类似一维数组。
3)DataFrame相当于一张二维的表格,类似二维数组,它的每一列都是一个Series。
4)为了定位Series中的元素,Pandas提供了Index对象,每个Series都会带有一个对应的Index,用来标记不用的元素。
5)DataFrame相当于多个带有同样Index的Series的组合(本质是Series的容器)。
(5)Seaborn(高级可视化库)
Seaborn库是基于Matplotlib的高级可视化库。
(6)Scikit-learn(机器学习库)
Scikit-learn库包含大量机器学习算法的实现,其提供了完善的机器学习工具箱,支持预处理、回归、分类、聚类、降维、预测和模型分析等强大的机器学习库,近乎一半的机器学习和数据科学项目都使用了该包。