![自学Python:编程基础、科学计算及数据分析](https://wfqqreader-1252317822.image.myqcloud.com/cover/254/34659254/b_34659254.jpg)
2.1 基本语法简介
先简单了解Python的一些基本语法规则。
1. 简单的数学运算
Python支持一些简单的数学运算,如加减乘除等:
![](https://epubservercos.yuewen.com/9B8D30/18513172808564606/epubprivate/OEBPS/Images/23_01.jpg?sign=1738823775-0cX38RdDhA5TMb3PJAWRL6ixvIqNCtM5-0-0ad10c946922a62d9913eb477aefe6c6)
对于这些表达式,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:
![](https://epubservercos.yuewen.com/9B8D30/18513172808564606/epubprivate/OEBPS/Images/24_01.jpg?sign=1738823775-MItrTO8ycO6ZqcKCbagfLoMuRXfV8fS6-0-9f51976cd3b8e4d0d5a4529fafc09386)
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
多行的字符串可以用三引号来生成:
![](https://epubservercos.yuewen.com/9B8D30/18513172808564606/epubprivate/OEBPS/Images/25_01.jpg?sign=1738823775-l67oddCODXhh9CnXUFxeMlckPUTVkgZH-0-19f3f3488ebba5827ed24fc3b86290f7)
(2)列表的生成
Python用一对中括号“[]”生成列表:
![](https://epubservercos.yuewen.com/9B8D30/18513172808564606/epubprivate/OEBPS/Images/25_02.jpg?sign=1738823775-uaOpWJYnaueSfypkOsoHb958yq60OUbv-0-361d745b0c08878d81a614dfc215276f)
(3)集合的生成
Python用一对花括号“{}”生成集合:
![](https://epubservercos.yuewen.com/9B8D30/18513172808564606/epubprivate/OEBPS/Images/25_03.jpg?sign=1738823775-eXlHAGYQ94Yx6UvnQuMMI6tLBFXQ0yWn-0-7379c2609f912147f92c0cfe7be8fd93)
(4)字典的生成
在Python中,花括号除了可以生成集合,还可以用来生成字典:
![](https://epubservercos.yuewen.com/9B8D30/18513172808564606/epubprivate/OEBPS/Images/25_04.jpg?sign=1738823775-YxduDjoEJHV2mmhNowErXvEAzXfEMxAf-0-b59a22c7700aa088315d4e452d608dbd)
5. 判断和循环
在Python中,判断可以用if结构实现:
![](https://epubservercos.yuewen.com/9B8D30/18513172808564606/epubprivate/OEBPS/Images/25_05.jpg?sign=1738823775-1TgYTvPnm4RdKl2NwAzYYLdzbuinp4fK-0-564658ed0fe3b7bfb011e4ed0d981c13)
循环可以用for结构实现:
![](https://epubservercos.yuewen.com/9B8D30/18513172808564606/epubprivate/OEBPS/Images/25_06.jpg?sign=1738823775-JQFl98WCeAPeEwPCUoZvCNqbne7VPHOu-0-7736e18c8240ef3c0b9eb1c0bb9a51dd)
其中,if、else、for等都是Python语言的保留关键字。
保留关键字(Reserved Keywords)是一类特殊的符号,这些符号有特殊的含义,不能被当作普通的变量来使用。
在Python中,保留关键字主要有:
![](https://epubservercos.yuewen.com/9B8D30/18513172808564606/epubprivate/OEBPS/Images/26_01.jpg?sign=1738823775-XSinM6wK9woYG3uLHDXtJ8FMAYfm9hxW-0-5aee025946bc1ad8a6c73cb707bcb1ec)
之后会具体介绍这些关键字的用法。
6. 代码块的缩进
Python通过缩进来控制代码的运行。
缩进的方式本身没有具体的格式要求,可以使用空格、制表符等进行缩进,比较常用的缩进方式是四空格缩进。缩进相同的一段代码被认为是一个代码块。
一个使用四空格缩进的例子如下:
![](https://epubservercos.yuewen.com/9B8D30/18513172808564606/epubprivate/OEBPS/Images/26_02.jpg?sign=1738823775-bhHTfaQxPRn2az0RudbhW1cG1KeF71Fy-0-ef8800e06e93dbc46ce2a7b236406141)
第二、三行的缩进相同,属于同一个代码块,它们是for循环中多次执行的部分。最后一行的缩进与for循环相同,会在for循环中结束运行之后执行。
一般来说,需要缩进的情况有:
● 判断:if、elif、else语句
● 循环:while语句,for语句
● 定义函数:def语句
● 定义类:class语句
● 上下文管理器:with语句
● 处理异常:try、expect、finally语句
无论是上面的哪种情况,在缩进代码块时,我们都会使用一个引号“:”去引导,这个引号是必不可少的。因此,缩进的代码块通常具有如下形式:
![](https://epubservercos.yuewen.com/9B8D30/18513172808564606/epubprivate/OEBPS/Images/26_03.jpg?sign=1738823775-PZwjiBRoiAb592xvHuhK9P8mYtj8rj23-0-07f13de674ef8202155552b8e9f1531b)
不能在代码中随意使用缩进,不符合规定的缩进在Python中是不允许的。
例如,不该缩进的地方随意缩进:
![](https://epubservercos.yuewen.com/9B8D30/18513172808564606/epubprivate/OEBPS/Images/26_04.jpg?sign=1738823775-jF6qAoLDzcKKGsdYWyaWPJOeS7vOpbzr-0-1c90fd4c09f9d1f46b60609729712a2a)
或者该缩进的地方不缩进:
if a > 2:
b = 2
代码缩进虽然一定程度上限制了写代码的自由度,但它可以使Python代码看起来更加规范,也更加简洁。
7. 模块的使用
可以导入模块来对Python的功能进行扩展。模块的导入需要使用import关键字。
例如,导入数学模块math,并调用其中的平方根函数math.sqrt()来计算16的平方根:
![](https://epubservercos.yuewen.com/9B8D30/18513172808564606/epubprivate/OEBPS/Images/27_01.jpg?sign=1738823775-Fae5O04AlAaJy4OlG6SgVfuqrdcTySNN-0-e300d75394c8a7a797bbf2f2f3488e5e)
8. 自定义类型
Python用class关键字来定义一个自定义类:
![](https://epubservercos.yuewen.com/9B8D30/18513172808564606/epubprivate/OEBPS/Images/27_02.jpg?sign=1738823775-RAtKI53bYzjtQ9mchBER5GDIwRh96EFK-0-b9416a64ef2cbac7a36a2a4e5d99522e)
其中:
● 第一行的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'
新属性可以通过赋值添加:
![](https://epubservercos.yuewen.com/9B8D30/18513172808564606/epubprivate/OEBPS/Images/28_01.jpg?sign=1738823775-HS5V2FpohO1tl8bO4DZ43eiIPgGeIuWQ-0-26fdf7f583f4c903eccea5751a01e6e4)
.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给某个值命名:
![](https://epubservercos.yuewen.com/9B8D30/18513172808564606/epubprivate/OEBPS/Images/28_02.jpg?sign=1738823775-qOZVtd5HYT2jMIrz8y3vfa10cNhl7TfV-0-192729f6ed4ba9cf487998b498940305)
原有的函数名max就会被新变量max覆盖,导致max()函数不能正常使用:
![](https://epubservercos.yuewen.com/9B8D30/18513172808564606/epubprivate/OEBPS/Images/28_03.jpg?sign=1738823775-NcLuNLXxf4RSB8govhoUVKNQ9b1Z6rCJ-0-0cd1471e02667844396bdc54982db7ef)