1.1 编程预备知识
- 计算机编程就是将现实中的任务通过计算机语言描述给计算机去执行的过程。
- 编程代码实际上就是简单地对我们的软件所复刻的世界子集中所存在的对象进行管理,比如创建 使用 复用和删除对象。
- 任何对象都具有两个主要的特性:属性和方法。属性是对象区别于其他同类对象的特征,比如可以使用笔的颜色,人的姓名等来标识这个对象;方法是对象能够执行的工作,如作为一个人可以说话 读书 走路,而其他动物则做不到,我可以做的任何事情都能够看成是表示我的那个对象的方法。
- 根据python官方文档的“数据模型”中的说法:对象是python对数据的抽象,python程序中的所有数据都是由对象或对象之间的关系所表示的。
- 对象的值有些可以改变,有些则不能。我们将可以改变的对象称为mutable对象,将不可变对象称为immutable对象。
- 我们需要为对象提供一个名称去使用它,诸如数值 字符串(文本) 集合这样的对象都有一个名称与之相对应,这种名称就是变量名。变量名就是装纳数据的盒子。
1.2 走进python
- python 是荷兰计算机科学家 数学家Guido Van Rossum 的杰出之作,于1989年出现,1991年展现在公众视野中,至今是最主流的编程语言之一。
1.3 python 的优点
- 可移植性:通常只需要修改路径和设置就能将一个程序在不同操作系统之间进行移植,如从Linux 到Windows 或Mac。
- 一致性:python具有极强的逻辑性和一致性,即使我们并不熟悉某个方法,也可以猜出他是怎么被调用的。
- 提高开发人员的效率:python的长度一般只有对应的Java或C++程序的五分之一到三分之一。
- 广泛的程序库:python官方提供了一个标准库,里面囊括了大部分的特性,除此之外,python社区还维护了一个第三方的程序库主体。我们可以通过python程序包索引(PyPI)来获取。
- 软件质量高:python专注于可读性 一致性和质量,可读性极高的同时我们可以将它当作一种脚本语言 面向对象式的 命令式的 函数式的编程风格,它是一种极为全能的语言。
- 软件集成度高:python可以扩展并于其他语言进行集成,充当黏合剂的效果。
1.4 python的缺点
- 目前唯一能找到的缺点就是执行速度,由于python不像其他语言一样编译到机器层次,所以速度较慢。
1.5 当前的python用户
- 包括谷歌 YouTube 雅虎 NASA IBM 等知名公司都在使用python,除此之外,python还可用于不同的环境,如系统编程 网页编程 图形用户界面(GUI) 游戏和机器人 快速原型 系统集成 数据科学 数据库应用程序等。
1.6 设置环境
1.7 安装python
- python已经完全集成并很可能已经自动安装于每个Linux 系统中,对于macOS 很可能已经安装好了python 2,对于Windows 则需要自行安装。
- 安装python方法可以参考python官网或 The hitchhiker's Guide to Python。
- 当我们创建一个新项目时,总是要创建一个虚拟环境。
1.8 运行python程序
- 脚本一般是完成某个任务时所执行的文件(通常较小)。
- 常用的GUI框架有:Tkinter PyQt wxPython PyGTK 。
1.9 python代码的组织方式
- 当我们用一个 .py 扩展名保存一个文件时,这个文件就成了一个python模块。
- 由于一个python 应用程序可能由数十万行代码组成,因此将所有代码保存在一个文件中是不切实际的,就算将他们划分到不同模块中也不够好。因此,python提供了一种名为package(程序包)的结构,它可以将模块组合在一起,一个程序包就是一个普通的文件夹,但它必须包含一个特殊文件:_ _int_ _.py,这个文件并不包含任何代码,它的存在只是为了告诉python这个文件夹不仅仅是个文件夹,还是个程序包。P.S. 在python 3.3后,_ _int_ _.py模块就不再是严格必须的了。
举个例子,下面是一个简单的应用程序的结构: example |———— core.py |———— run.py |———— util |———— __init__.py |———— db.py |———— math.py |———— network.py 可以看到这个例子的根目录下有两个模块:core.py(应用程序的核心逻辑)和run.py(应用程序的启动逻辑),最后一个是程序包 util,在程序包中,可以看到各种工具模块,db.py可能包含了用于操作数据库的工具,math.py可能包含了数学工具,network.py可能包含了通过网络发送和接收数据的工具。正如前面所言,__init__.py存在的意义就是为了告诉python:util是一个程序包而不是一个简单的文件夹。 ------------------------------------------------------------------------------------------- 如果不这么做的话,那么想要推断它的结构是非常困难的,如: files_only/ |———— core.py |———— db.py |———— math.py |———— network.py |———— run.py 想要猜测每个模块的作用就会变得困难许多。
- 不要做重复劳动原则:绝对不要在应用程序中把同一段代码重复多次!
- 当我们需要复用一段代码时,我们需要使用一段结构来保存这段代码,每次需要复制使用时就可以调用这个结构,这就是函数。函数是应用程序模块化的基础构件,是不可或缺的。(函数将在第四章详解)
- 在python的优点中我们提到,python提供了一个非常全面的程序库。程序库是一些函数和对象的集合,提供了一些功能,从而丰富了语言的功能。
1.10 python 的执行模型
- 名称:相当于其他语言的变量名,每个对象都有一个名称与之对应,保存名称的空间,称为名字空间。
- 名字空间:是名称到对象的一种映射,包含内置名称的集合(包含了任何python程序都能访问的函数) 模块中的全局名称以及函数内部的局部名称 一个对象的属性集合等。只需要记住名字空间是名称与对象进行关联的场所就可以了。
名字空间的优点在于允许我们清晰地定义和组织我们的名称,而不会出现重叠或冲突,例如: from library.second_floor.section_x.row_three import book 我们从library名字空间开始,通过使用点号操作符(.),我们可以进入这个名字空间,在这个空间中我们再次找到second_floor并使用点号操作符进入,以此类推,进入最后一个名字空间row_three,就可以找到我们想要的东西:book。
-
作用域:是python程序的一个文本区域,用户可以在其中直接访问一个名字空间。直接访问意味着当我们寻找一个未加限定引用的名称时,python会试图在这个名字空间中查找。
-
python提供四个可以访问的不同作用域(不一定同时存在):局部/外层/全局/内置作用域。在寻找一个名称时,名字空间的依次搜索,即(LEGB规则)。
-
python是通过缩进代码来定义作用域的,我们通过缩进进入下一个作用域,一般使用4个空格的缩进。
-
类的定义是用class创建的,class后面的代码都被缩进了,称为类体。
-
在python中,每个具有前缀和后缀双下划线的方法称为魔术方法,如类的初始化方法__init__。在自定义方法时,不应使用双下划线作为方法名的前缀和后缀。