语法概述

1.1 格式框架
1.1.1 缩进
Python 语言采用严格的 “缩进” 来表明程序的格式框架。缩进用来表示代码之间的包含和层次关系,它是 Python 语言中表明程序框架的唯一手段。PEP 8 指南建议使用四个空格表示一个缩进,这既提高了可读性,又留下了足够的多级缩进空间。

在字处理文档中,通常被广泛使用的是制表符,而不是使用空格来完成缩进。对于字处理文档来说,这样做的效果很好,但混合使用制表符和空格会让 Python 解释器感到迷惑。好在每款编辑器都提供了一种功能,可以将输入的制表符转换为指定数量的空格。因此,在编写代码时*对应该使用制表符键,但一定要对编辑器进行设置,使其在文档中插入空格而不是制表符。

1.1.2 注释
注释是代码中的辅助性文字,用以在程序中使用自然语言进行解释说明。Python 语言采用 # 表示一行注释的开始,多行注释需要在每行开始都使用 #。PEP 8 建议注释的行长不应超过 72 字符。

严格地讲,Python 并未提供多行注释。但可以使用成对的三个单引号 ”’ 或双引号 “”” 来实现多行注释的功能。事实上, ”’ 或 “”” 在 Python 中用来完成文档注释。

1.1.3 续行符
Python 程序是逐行编写的,每行代码的长度并无限制。但单行代码太长会不利于阅读,PEP 8 建议每行不超过 80 个字符。

在 Python 中可以使用续行符将单行代码分割成多行代码,Python 中的续行符为 \,续行符后应直接换行。列表、元组、字典中的元素之间不使用续行符也可以直接换行。

在大多数的开发软件中,都可以设置一个视觉标志,通常是一条垂直参考线,让你知道不能越过的界限在什么地方。

1.1.4 空行
要将程序的不同部分分开,可使用空行。空行与代码缩进不同,它并不是 Python 语法的一部分。即使书写时不插入空行,也不会出现语法错误。但是空行的作用在于分隔两段不同功能或含义的代码,便于日后代码的维护或重构。因此,空行也是程序代码的重要部分。

通常,函数之间或类中的方法之间用空行分隔,表示一段新的代码的开始。类和函数入口之间也用一行空行分隔,以突出函数入口的开始。

1.2 基本语法元素
1.2.1 变量与常量
变量是保存和表示数据值的一种语法元素。变量的值可以改变,能够通过赋值方式被修改。变量的标识符通常全部使用小写字母,单词之间使用下划线连接。

常量是一种特殊的变量,其值在程序的整个生命周期内保持不变。通常使用全部大写变量名的方式来指出应将该变量视为常量。相比于直接使用字面值而言,为常量指定一个有意义的名称,可以更清晰地表达出它的用途。

1.2.2 标识符
Python 语言允许使用大写字母、小写字母、数字、下划线和汉字等字符及其组合给变量、函数、类等命名,即标识符。标识符的长度没有限制,首字符不能是数字,中间不能出现空格。

注意:Python 对大小写敏感,例如 message 和 Message 是两个不同的标识符。

1.2.3 保留字
保留字,也称为关键字,指被编程语言内部定义并保留使用的标识符。程序员编写程序不能定义与保留字相同的标识符。每种程序设计语言都有一套保留字,保留字一般用来构成程序的整体框架、表达关键值和具有结构性的复杂语义等。

1.3 基本语句元素
1.3.1 表达式
产生或计算新数据值的代码片段称为表达式。表达式类似数学中的计算公式,运算后产生运算结果,运算结果的类型由操作符或运算符决定。表达式一般由数据和操作符等构成,是构成 Python 语句的重要部分。

1.3.2 赋值语句
Python 语言中,= 表示 “赋值”,即将等号右侧的值计算后将结果值赋给左侧变量,包含等号 = 的语句称为 “赋值语句”。格式为:

<变量> = <表达式>

还可以使用同步赋值语句同时给多个变量赋值,格式为:

<变量 1>, …, <变量 N> = <表达式 1>, …, <表达式 N>

1.3.3 分支与循环
分支语句的作用是根据判断条件选择程序执行路径,包括单分支、二分支和多分支。

循环语句与分支语句控制程序执行类似,它的作用是根据判断条件确定一段程序是否再次执行一次或者多次。循环语句包括遍历循环和条件循环。

1.4 数据类型概述
1.4.1 数字类型
Python 中的数字类型有整数、浮点数、复数,分别和数学中的整数、小数、复数相对应。不同的数字类型可以直接计算。可以把 IDLE 当作一个计算器使用:

>>> 1 + 2
3
>>> 3 – 2
1
>>> 2 * 3
6
>>> 3 / 2
1.5
>>> 3 ** 2
9
>>> 3 ** 0.5
1.7320508075688772
>>> 2 + 3*4
14
>>> (2 + 3) * 4
20

1.4.2 字符串
字符串是字符的序列表示,根据字符串的内容多少分为单行字符串和多行字符串。单行字符串由一对单引号 ‘ 或双引号 ” 作为边界来表示,多行字符串由一对三单引号 ”’ 或三双引号 “”” 作为边界来表示。

在 Python 中,单引号和双引号都用来表示字符串。这种设计的好处是可以在字符串中很轻松地包含引号和撇号:

>>> print(‘I tlod my friend, “Python is interesting.”‘)
I tlod my friend, “Python is interesting.”
>>> print(“She’s my best friend.”)
She’s my best friend.

还有一种特殊的字符串是转义字符。Python 语言的转义符为 \,其与后面相邻的一个字符共同组成了新的含义。如:\n 表示换行、\\ 表示反斜杠、\’ 表示单引号、\” 表示双引号、\t 表示制表符。

字符串是一个字符序列。字符串*左端位置标记为 0,向右依次增加;*右端位置标记为 -1,向左依次递减。对字符串中某个字符的检索被称为索引。索引的使用方式为:

<字符串或字符串变量>[序号]

>>> ‘hello'[0]
‘h’
>>> ‘hello'[3]
‘l’
>>> ‘hello'[-2]
‘l’

Python 中的字符串以 Unicode 编码存储,字符串的英文字符和中文字符都算作 1 个字符。

对字符串中某个子串或区间的检索被称为切片。切片的使用方式为:

<字符串或字符串变量>[N: M]
1
切片将会返回字符串的第 N 个到第 M 个字符,不包含末尾的 M 个字符。

>>> ‘hello'[1: 3]
‘el’
>>> ‘hello'[1:] # 检索区间到*后一个字符结束
‘ello’
>>> ‘hello'[: 3] # 检索区间从 0 开始
‘hel’
>>> ‘hello'[:] # 返回字符串副本
‘hello’

此外,还可以在切片时指定步长:

<字符串或字符串变量>[N: M: K]
1
>>> ‘hello'[::2]
‘hlo’
>>> ‘hello'[::-1]
‘olleh’
>>> ‘hello'[1: 3: 2]
‘e’

1.4.3 列表与元组
列表、元组以及字符串在 Python 中同属于序列类型。序列类型是一维元素向量,元素之间存在先后关系,通过序号访问。因此,上述对字符串的索引、切片操作同样适用于列表及元组类型。

字符串类型可以看成是字符的有序组合。列表则是一个可以使用多种类型元素的序列类型,由方括号[]表示,列表中的元素可以进行修改。

>>> pets = [‘dog’, ‘cat’, ‘rabbit’] # 创建列表
>>> pets[1] = ‘parrot’ # 修改列表
>>> pets
[‘dog’, ‘parrot’, ‘rabbit’]

元组可以被视为一种特殊的列表,它使用圆括号来表示,元组中的元素不能被更改。

>>> pets = (‘dog’, ‘cat’, ‘rabbit’)
>>> pets[0] = ‘goldfish’
Traceback (most recent call last):
File “<pyshell#5>”, line 1, in <module>
pets[0] = ‘goldfish’
TypeError: ‘tuple’ object does not support item assignment

对于序列类型,有一些通用的操作:

x in s:如果 x 是 s 的元素,返回 True,否则返回 False。

x not in s:如果 x 不是 s 的元素,返回 True,否则返回 False。

s + t:连接 s 和 t。

s * n 或 n * s:将序列 s 复制 n 次。

len(s):返回序列 s 的元素个数(长度)。

min(s):返回序列 s 中的*小元素。

max(s):返回序列 s 中的*大元素。

sorted(s):对 s 的元素进行顺序排序,并以列表的形式返回结果。如果需要逆序排序,传递参数 reverse=True 即可。

s.index(x):返回序列 s 中*次出现元素 x 的位置。

s.count(x):返回序列 s 中出现 x 的总次数。

1.4.4 集合与字典
Python 语言中的集合类型与数学中的集合概念一致,即包含 0 个或多个数据项的无序组合,用大括号 {} 表示。因为集合是无序的,所以没有索引和位置的概念。集合中的元素可以进行增删。

集合中的元素类型只能是固定数据类型,例如:整数、浮点数、字符串、元组等,而列表、字典和集合类型本身都是可变数据类型,不能作为集合的元素出现。

>>> S = {2.71, ‘dog’, (1, 2)}
>>> S
{2.71, (1, 2), ‘dog’}

从上面的程序可以看到,集合的打印效果与定义顺序并不一致,因为集合元素是无序的。

字典是一种映射类型,使用 “键值对” 组织数据。这种组织数据的方式广泛应用在 Web 系统中。键值对的基本思想是将 “值” 信息关联一个 “键” 信息,进而通过键信息查找对应的值信息,这个过程叫映射。Python 语言中通过字典类型实现映射。

Python 语言中的字典使用大括号 {} 建立,每个元素是一个键值对,使用方式如下:

{<键 1>: <值 1>, <键 2>: <值 2>, …, <键 n>: <值 n>}

其中,键和值通过冒号连接,不同的键值对通过逗号隔开。从 Python 3.7 开始,字典中元素的排列与定义时相同。如果将字典打印出来或遍历其元素,将发现元素的排列顺序与添加顺序相同。

字典有时会存储众多的数据,因此可以使用多行来定义一个字典。例如下面的字典存储了每个人*喜欢的编程语言:

favourite_languages = {
‘jen’: ‘python’,
‘sarch’: ‘c’,
‘edward’: ‘ruby’,
‘phil’: ‘python’,
}

如上代码所示,*后一个键值对的后面也添加了逗号,这样做的好处是可以为添加下一行键值对时做好准备。

列表类型采用元素的位置进行索引。在字典的键值对元素中,键是值的索引,因此,可以直接利用键值对关系索引元素。字典中键值对的索引模式如下,采用中括号格式:

<值> = <字典变量>[<键>]

>>> d = {“01”: “小明”, “02”: “小红”, “03”: “小白”}
>>> d[“02”]
小红

利用索引和赋值操作配合,可以对字典中每个元素进行修改:

>>> d = {“01”: “小明”, “02”: “小红”, “03”: “小白”}
>>> d[“02”] = “阿红”
>>> d
{’01’: ‘小明’, ’02’: ‘阿红’, ’03’: ‘小白’}

通过索引和赋值配合,还可以向字典中增加元素:

>>> d = {}
>>> d[“04”] = “小新”
>>> d
{’04’: ‘小新’}

对于字典中不再需要的信息,可以使用 del 语句将相应的键值对彻底删除。使用 del 语句时,必须指定字典名和要删除的键。

>>> d = {“01”: “小明”, “02”: “小红”, “03”: “小白”}
>>> del d[“03″]
>>> d
{’01’: ‘小明’, ’02’: ‘小红’}

1.5 基本输入输出函数
1.5.1 input() 函数
input() 函数用以从控制台获得用户的一行输入,无论用户输入什么内容,input() 函数都以字符串类型返回。input() 函数可以包含一些提示性文字,用来提示用户。格式为:

<变量> = input(<提示性文字>)

name = input(‘能告诉我你的名字吗:’)
print(f’你好,{name}。’)
————————————————————————
能告诉我你的名字吗:John Lennon
你好,John Lennon。

有时候,提示信息可能有多行。可以先把提示信息赋值给一个变量,再把这个变量传递给函数 input():

prompt = ‘可以告诉我你的名字吗?’
prompt += ‘\n我将告诉你一个秘密。’
name = input(prompt)
print(f'{name}, 你将永远被人铭记。’)
————————————————————————
可以告诉我你的名字吗?
我将告诉你一个秘密。John Lennon
John Lennon, 你将永远被人铭记。

也可以使用多行字符串来表示提示信息:

prompt = ”’可以告诉我你的名字吗?
我将告诉你一个秘密。”’

1.5.2 eval() 函数
eval() 函数是 Python 语言中一个十分重要的函数,它能够以 Python 表达式的方式解析并执行字符串,将返回结果输出。

eval() 函数经常和 input() 函数一起使用,用来获取用户输入的数字,使用方式为:

<变量> = eval(input(<提示性文字>))

1.5.3print() 函数
print() 函数用于输出运算结果,根据输出内容的不同,有三种用法。

*种,仅用于输出字符串,使用方式为:

print(<待输出字符串>)

print(‘世界和平’)
————————————————————————
世界和平

如果 print() 函数中的字符串很长,可以在合适的位置分行。只需要在每行末尾都加上引号,同时对于除*行以外的其他各行,都在行首加上引号并缩进。

print(“话语不断涌出心头,像无止尽的雨浸入纸杯。”
“雨水倾泻,纷纷划过天际。”)
————————————————————————
话语不断涌出心头,像无止尽的雨浸入纸杯。雨水倾泻,纷纷划过天际。

第二种,仅用于输出一个或多个变量,使用方式为:

print(<变量 1>, <变量 2>, …, <变量 n>)

value = 123.456
print(value, value, value)
————————————————————————
123.456 123.456 123.456

第三种,用于混合输出字符串与变量值,使用方式为:

print(<输出字符串模板>.format(<变量 1>, <变量 2>, …, <变量 n>))

a, b = 123.456, 1024
print(“数字 {} 和数字 {} 的乘积是 {}”.format(a, b, a*b))
————————————————————————
数字 123.456 和数字 1024 的乘积是 126417.944

print() 函数输出完文本后会默认换行,如果不希望换行,或者希望在文本后增加其他内容,可以对 print() 函数的 end 参数进行赋值。格式为:

print(<待输出内容>, end=”<增加的输出结尾>”)

>>> a = 24
>>> print(a, end=”.”)
24.
>>> print(a, end=”%”)
24%

end 的值为空字符串 ” 时,表示将前后输出的字符串在同一行连续显示。

for i in range(1, 10):
print(i, end=”)