自学Python:编程基础、科学计算及数据分析
上QQ阅读APP看书,第一时间看更新

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()函数不能正常使用: