
2.1 基本语法简介
先简单了解Python的一些基本语法规则。
1. 简单的数学运算
Python支持一些简单的数学运算,如加减乘除等:

对于这些表达式,IPython解释器会将计算的结果显示在“Out[]”的输出中。
2. 变量的赋值
变量(Variable)是一个有名字的对象,可以利用变量名对变量进行操作。
在Python中,可以直接使用“=”号对变量进行赋值。
例如,将值0.2赋给变量a:
In [5]: a = 0.2
IPython解释器没有显示“Out []”的结果,原因是赋值表达式的返回值为None。None是Python中一种特殊的数据类型,表示空类型,即什么都没有。
Python对变量的值和类型没有任何限制。我们可以随时修改变量a的值和类型,如“a= 100”或者“a = 'abc'”。
除了值,我们也可以将一个完整的表达式赋给变量。Python会先计算表达式,然后将表达式计算得到的结果赋给变量。
例如,用4*3赋值后,a的值为12:

Python还支持一次给多个变量赋值的方式:
In [8]: a, b = 0.2, 2
赋值后,a的值为0.2,b的值为2。
3. 函数的调用
Python中的函数可以用“函数名(参数)”的形式调用。
例如,绝对值函数abs():
In [9]: abs(-3)
Out[9]: 3
最大值函数max():
In [10]: max(2, 3)
Out[10]: 3
不同的函数有不同的使用方法和功能。
4. 不同类型数据的生成
在Python中,不同的语法可以生成不同类型的数据。
(1)字符串的生成
Python用一对引号生成字符串,单引号与双引号是等价的,但不能混用:
In [11]: s1 = "Hello World!"
In [12]: s2 = 'Hello World!'
变量的类型可以用函数type()来得到:
In [13]: type(s1)
Out[13]: str
多行的字符串可以用三引号来生成:

(2)列表的生成
Python用一对中括号“[]”生成列表:

(3)集合的生成
Python用一对花括号“{}”生成集合:

(4)字典的生成
在Python中,花括号除了可以生成集合,还可以用来生成字典:

5. 判断和循环
在Python中,判断可以用if结构实现:

循环可以用for结构实现:

其中,if、else、for等都是Python语言的保留关键字。
保留关键字(Reserved Keywords)是一类特殊的符号,这些符号有特殊的含义,不能被当作普通的变量来使用。
在Python中,保留关键字主要有:

之后会具体介绍这些关键字的用法。
6. 代码块的缩进
Python通过缩进来控制代码的运行。
缩进的方式本身没有具体的格式要求,可以使用空格、制表符等进行缩进,比较常用的缩进方式是四空格缩进。缩进相同的一段代码被认为是一个代码块。
一个使用四空格缩进的例子如下:

第二、三行的缩进相同,属于同一个代码块,它们是for循环中多次执行的部分。最后一行的缩进与for循环相同,会在for循环中结束运行之后执行。
一般来说,需要缩进的情况有:
● 判断:if、elif、else语句
● 循环:while语句,for语句
● 定义函数:def语句
● 定义类:class语句
● 上下文管理器:with语句
● 处理异常:try、expect、finally语句
无论是上面的哪种情况,在缩进代码块时,我们都会使用一个引号“:”去引导,这个引号是必不可少的。因此,缩进的代码块通常具有如下形式:

不能在代码中随意使用缩进,不符合规定的缩进在Python中是不允许的。
例如,不该缩进的地方随意缩进:

或者该缩进的地方不缩进:
if a > 2:
b = 2
代码缩进虽然一定程度上限制了写代码的自由度,但它可以使Python代码看起来更加规范,也更加简洁。
7. 模块的使用
可以导入模块来对Python的功能进行扩展。模块的导入需要使用import关键字。
例如,导入数学模块math,并调用其中的平方根函数math.sqrt()来计算16的平方根:

8. 自定义类型
Python用class关键字来定义一个自定义类:

其中:
● 第一行的Person(object)表示自定义类的名称为Person,该类继承自类object;第一个def关键字定义的__init__是用来初始化对象的方法,其中self表示对象自身,self.xxx表示对象的属性;第二个def关键字定义的full_name是该类的一个方法。
有了这个定义,我们可以使用类名来构造该类的一个新对象:
In [31]: person = Person('Mertle', 'Sedgewick', 52)
使用类名构造对象时,Python会调用该类的.__init__()方法对传入的三个参数进行处理,它们分别对应于.__init__()方法的三个参数first,last,age。
在初始化之后,对象person具有.first、.last和.age这三个属性。
属性可以直接调用:
In [32]: person.first
Out[32]: 'Mertle'
属性可以通过赋值修改:
In [33]: person.last = 'Smith'
新属性可以通过赋值添加:

.full_name()是对象的一个方法,可以直接调用:
In [36]: person.full_name()
Out[36]: 'Mertle Smith'
9. 变量的命名规范
Python变量的命名有一定的规范。
一般来说,一个合法的变量名由小写字母、大写字母、数字、下画线组成,变量名可以包含数字,但不能以数字开头,且不能完全是数字。
本书使用以下方式对变量进行命名:
● 普通变量:全小写字母,单词之间用下画线分割,如my_var;
● 全局常量:全大写字母,单词之间用下画线分割,如MY_CONST;
● 类名:首字母大写,单词直接连在一起,如MyClass;
● 普通函数:与普通变量一样,如my_function();
● 模块名:全小写字母,不使用下画线。
10. 变量名的覆盖
由于Python的命名规则比较宽松,我们要尽量避免使用Python已有的名称对变量进行命名,因为这样可能会破坏函数原有的功能,出现意想不到的结果。
例如,Python中有一个最大值函数max():
In [37]: type(max)
Out[37]: builtin_function_or_method
如果直接用max给某个值命名:

原有的函数名max就会被新变量max覆盖,导致max()函数不能正常使用:
