![自学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=1739301423-XTimS4IMlgY3xji1Qh9TF5CkkufLcViw-0-d8798a0759b165b424b25d6da7e38103)
对于这些表达式,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=1739301423-H1Ywb4plToV0NkyOigr22ZgmQx9HeD5E-0-c39e93f92d175f86b70372505bac1e79)
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=1739301423-jCUUdbDnZGqYaGJYSfi7EjVR56dhLagT-0-17ea9b254b72f33da142ba1244f82197)
(2)列表的生成
Python用一对中括号“[]”生成列表:
![](https://epubservercos.yuewen.com/9B8D30/18513172808564606/epubprivate/OEBPS/Images/25_02.jpg?sign=1739301423-4WulknuSCWKhwAjuvermdJAiJI1lm1tI-0-7bc90ab64b1cd74b18a53ac6309a4220)
(3)集合的生成
Python用一对花括号“{}”生成集合:
![](https://epubservercos.yuewen.com/9B8D30/18513172808564606/epubprivate/OEBPS/Images/25_03.jpg?sign=1739301423-6vbg4p0L2e6fMba7kem4ygarCJa7qblg-0-a395d1ebc516ab1f7e7421ffe21f07e6)
(4)字典的生成
在Python中,花括号除了可以生成集合,还可以用来生成字典:
![](https://epubservercos.yuewen.com/9B8D30/18513172808564606/epubprivate/OEBPS/Images/25_04.jpg?sign=1739301423-KM4jLPZhVNXdHopxolnVKbpLua5Hv6iJ-0-881760f951676eefaa5ab6a6652dc3af)
5. 判断和循环
在Python中,判断可以用if结构实现:
![](https://epubservercos.yuewen.com/9B8D30/18513172808564606/epubprivate/OEBPS/Images/25_05.jpg?sign=1739301423-v3jBgzc9HvQAzkvq0PGpCbTicPyxnC43-0-85975bd44b440c2c7f20205251a316cd)
循环可以用for结构实现:
![](https://epubservercos.yuewen.com/9B8D30/18513172808564606/epubprivate/OEBPS/Images/25_06.jpg?sign=1739301423-OP6byG8xw9FLCRNyZhhok4pHo5Q1Zzke-0-71b4461db1c72218727a5bf0ff22eabc)
其中,if、else、for等都是Python语言的保留关键字。
保留关键字(Reserved Keywords)是一类特殊的符号,这些符号有特殊的含义,不能被当作普通的变量来使用。
在Python中,保留关键字主要有:
![](https://epubservercos.yuewen.com/9B8D30/18513172808564606/epubprivate/OEBPS/Images/26_01.jpg?sign=1739301423-gbsdDh0p3XzjmFsCt4zcWP7QeuSNaiQs-0-987c94e1228e73429982b9737d5bce7f)
之后会具体介绍这些关键字的用法。
6. 代码块的缩进
Python通过缩进来控制代码的运行。
缩进的方式本身没有具体的格式要求,可以使用空格、制表符等进行缩进,比较常用的缩进方式是四空格缩进。缩进相同的一段代码被认为是一个代码块。
一个使用四空格缩进的例子如下:
![](https://epubservercos.yuewen.com/9B8D30/18513172808564606/epubprivate/OEBPS/Images/26_02.jpg?sign=1739301423-LGJGQY9WeE2M3Um5V4dasB1nR5nz7nsX-0-c67647543afc4621a17718e93bbb0852)
第二、三行的缩进相同,属于同一个代码块,它们是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=1739301423-k0fJCH4dw4tsovd6W2vCcUaRi5fm1xBc-0-e538793ecb5e2eb05ab18717bef39b21)
不能在代码中随意使用缩进,不符合规定的缩进在Python中是不允许的。
例如,不该缩进的地方随意缩进:
![](https://epubservercos.yuewen.com/9B8D30/18513172808564606/epubprivate/OEBPS/Images/26_04.jpg?sign=1739301423-iOP479wXrkI6MXffqHs4D5oidtAh6TcL-0-31ce5d3d0bc95ccf36043684503167ee)
或者该缩进的地方不缩进:
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=1739301423-BfUXfFBmmUsJd8b13uoQy36lvScPhC6h-0-8c1479e8568db9e3c50bc1f758492c40)
8. 自定义类型
Python用class关键字来定义一个自定义类:
![](https://epubservercos.yuewen.com/9B8D30/18513172808564606/epubprivate/OEBPS/Images/27_02.jpg?sign=1739301423-d7IXRu3TDZlTjNNWjjfG05s4osmeITpq-0-926bab8620cc4b572620713d9401b4d2)
其中:
● 第一行的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=1739301423-RwnfKTW5S9visdJFHct2pJedec6jICFc-0-a6e3ac6adfb8076f1b8a26c39af70f38)
.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=1739301423-KijGpz95yJ5SwuKLTySXMTBKDdlniBa3-0-048ad75b900743d11fc51264fe6cbedc)
原有的函数名max就会被新变量max覆盖,导致max()函数不能正常使用:
![](https://epubservercos.yuewen.com/9B8D30/18513172808564606/epubprivate/OEBPS/Images/28_03.jpg?sign=1739301423-o9GEsHgHCRo32uxkOtOhegnxOcwaqD4B-0-4854cd4b926ff6a47e43d67fb0a03652)