目录
[7.1 列表](#7.1 列表)
[7.2 元组](#7.2 元组)
[7.3 字典](#7.3 字典)
[7.4 集合](#7.4 集合)
[8.1 算术运算符](#8.1 算术运算符)
[8.2 比较运算符](#8.2 比较运算符)
[8.3 赋值运算符](#8.3 赋值运算符)
[8.4 位运算符](#8.4 位运算符)
[8.5 逻辑运算符](#8.5 逻辑运算符)
[8.6 成员运算符](#8.6 成员运算符)
[8.7 身份运算符](#8.7 身份运算符)
[10.1 if语句](#10.1 if语句)
[10.2 for循环](#10.2 for循环)
[10.3 while循环](#10.3 while循环)
提示:本文适合已经有编程基础的读者阅读,仅罗列Python中的语法,不对基础概念作讲解
一、标识符和关键字
标识符,即变量、方法、对象等的名字,由用户自己定义
- Python中标识符不能以数字开头,由大小写字母、数字、下划线组成
- 标识符对大小写敏感,A和a是两个不同的变量名
- 在Python 3中,可以用中文作为变量名,同时允许非ASCII的标识符
- 标识符不能和关键字相同
关键字,又称为保留字,是一个计算机语言中的预定义保留标识符
Python中一共有35个关键字,它们分别是:
|--------|----------|----------|--------|
| False | class | from | or |
| None | continue | global | pass |
| True | def | if | raise |
| and | del | import | return |
| as | elif | in | try |
| assert | else | is | while |
| async | except | lambda | with |
| await | finally | nonlocal | yield |
| break | for | not | |
二、注释
单行注释:以#开头,例如
python
# 这是单行注释
多行注释:以上下分别三个单引号或双引号包裹,例如
python
'''
这是多行注释
'''
"""
这也是多行注释
"""
三、缩进
Python不同于C++等语言,不需要用大括号括起来表示一个代码块
只要一段连续多行的代码有着相同的缩进空格数即为一个代码块,例如

如果在C++中的话,这三个print隶属于if语句下需要执行的代码,所以要用大括号括起来
但Python只需要保证这三条语句的缩进空格是一样的即可
四、输入和输出
Python中的 print 函数用于输出我们指定的内容
与C语言的 printf 和C++的 cin 不同,Python的 print 默认在内容的最后会自带换行,例如:

如果想要取消默认换行,则需要在最后加上 end="" ,例如

Python中的 input 函数用于读取我们键盘输入的内容,其用法如下:

在 input 中可以输入我们预先想要打印出来的内容,当然也可以什么都不输入
然后会读取我们键盘输入的内容给等号左侧的变量
需要注意,input接受输入的时候得到的结果实际上是字符串
五、字符串操作
前面提到,字符串是由字符组成的序列,用单引号或双引号括起来都行
一个字符串中的每个字符都有一个索引(下标),第一个字符对应的索引为0,往后逐渐递增
我们可以通过方括号+索引的形式来单独取出字符串中的单词,例如:

还有一种操作叫切片,即通过指定一个起始索引和一个结束索引来提取指定区间的子字符串,例如

可以看到,索引从1到2的子字符串就被"切"出来了。同时可以观察到,子字符串中不包含我们指定的结束索引,所以子字符串的区间范围是左闭右开的
关于字符串的拼接操作也很简单,使用加号就可以将两个字符串拼成一个字符串,例如:

除了两个字符串相加,还可以通过将一个字符串乘以一个正数的方式重复某个字符串,例如:

六、基本数据类型
Python中一共有这些数据类型:
python
a = 1 # 整型变量
b = 1.1 # 浮点型变量
c = True # bool型变量
d = "hello" # 字符串
e = [1, 2, 3] # 列表
f = (1, 2, 3) # 元组
g = {1, 2, 3} # 集合
h = {1: 1, 2: 2, 3: 3} # 字典
Python中不论是单个字符还是一串字符,其类型都是字符串

其中下面的复合数据类型列表、元组、集合和字典在后面会细讲,这里先见个面
Python中的变量不需要声明类型,这也是和C++等语言不同之处
相对的,每个变量在声明的同时必须赋值。在Python中,变量就是变量,没有类型,只是它内部存储的对象有类型
当然,还有一些不太常见的类型,例如复数:

七、复合数据类型
7.1 列表
Python中的列表类似于C/C++中的数组,最大的区别在于其内部可以混杂不同类型的元素,例如:

可以看到,列表中混杂了整型、浮点型、bool型、字符串和列表,不仅如此,还可以加入元组等
列表的特征是方括号,其内部每个元素都有一个索引,第一个元素的索引为0,往后递增

我们也可以通过方括号和索引来修改其内部元素,例如:

列表也支持切片操作,例如:

列表也支持拼接操作,例如:

列表也支持乘以一个数,这里不演示了
7.2 元组
元组与列表类似,区别在于元组内部的元素不可被修改,例如:

但是元组内部的列表可以被修改,像这样:

元组的特征是小括号
元组也支持切片操作,例如:

元组也支持拼接操作,例如:

元组也支持乘以一个数,这里不演示了
7.3 字典
字典是一个key/value模型的容器,其内部也一样可以存储不同类型的键值对,例如:

字典没有下标,不过我们可以通过key来访问或修改其对应的value值,像这样:

字典中不能出现两个相同的key,但是可以出现相同的value
字典不支持切片、拼接和乘法
7.4 集合
把字典去掉value值就变为了集合

集合的特点是去重,即其内部不会有两个相同的元素,例如我们打印上面的这个集合

可以看到True不见了,这是因为True等价于1,那么1就出现了两次,所以会去掉一个
集合不支持切片、拼接和乘法
八、数据类型转换
在C++中,如果我们要显式的将一个类型转换为另一个类型,可以像这样:
cpp
float a = 1.1;
int b = (int)a;
在变量的前面加上类型即可
Python中的类型转换也是这样,不过括号括住的不是类型而是变量,例如:
python
a = 1.1
b = int(a)
前面提到,input接受输入的时候得到的结果实际上是字符串,所以如果我们想实现读入两个数字并相加,则需要配合类型转换来实现,例如:

另外,在C++中字符也是整型家族的一员,其值为这个字符的ASCII码
但是Python中,如果我们把一个整型和一个字符相加则会导致错误,因为Python中只有字符串没有字符类型

但是我们可以通过显式的类型转换把数字串转化为整型,例如:

九、运算符
Python中的运算符大部分和C/C++差不多,不过有一部分还是有区别的
8.1 算术运算符
|---------|---------------------------|
| 运算符 | 描述 |
| + | 加 - 两个对象相加 |
| - | 减 - 得到负数或是一个数减去另一个数 |
| * | 乘 - 两个数相乘或是返回一个被重复若干次的字符串 |
| / | 除 - x除以y(非整除) |
| % | 取模 - 返回除法的余数 |
| ** | 幂 - 返回x的y次幂 |
| // | 取整除 - 返回商的整数部分(向下取整) |
8.2 比较运算符
|---------|--------------------------------|
| 运算符 | 描述 |
| == | 等于 - 比较对象是否相等 |
| != | 不等于 - 比较两个对象是否不相等 |
| <> | 不等于 - 比较两个对象是否不相等(python3 已废弃) |
| > | 大于 - 返回x是否大于y |
| < | 小于 - 返回x是否小于y |
| >= | 大于等于 - 返回x是否大于等于y |
| <= | 小于等于 - 返回x是否小于等于y |
8.3 赋值运算符
|---------|----------|
| 运算符 | 描述 |
| = | 简单的赋值运算符 |
| += | 加法赋值运算符 |
| -= | 减法赋值运算符 |
| *= | 乘法赋值运算符 |
| /= | 除法赋值运算符 |
| %= | 取模赋值运算符 |
| **= | 幂赋值运算符 |
| //= | 取整除赋值运算符 |
8.4 位运算符
|---------|-------------------------------------------------------|
| 运算符 | 描述 |
| & | 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 |
| | | 按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1 |
| ^ | 按位异或运算符:当两对应的二进位相异时,结果为1 |
| ~ | 按位取反运算符:将二进制表示中的每一位取反,0变为1,1变为0 |
| << | 左移动运算符:运算数的各二进位全部左移若干位,由 << 右边的数字指定了移动的位数,高位丢弃,低位补0 |
| >> | 右移动运算符:把">>"左边的运算数的各二进位全部右移若干位,>> 右边的数字指定了移动的位数 |
8.5 逻辑运算符
|---------|-----------|-----------------------------|
| 运算符 | 逻辑表达式 | 描述 |
| and | x and y | x和y都为真,整个表达式结果才为真,否则为假 |
| or | x or y | x和y都为假,整个表达式结果才为假,否则为真 |
| not | not x | x为真,整个表达式结果为假;x为假,整个表达式结果为真 |
例如:

8.6 成员运算符
|---------|----------------------------------|
| 运算符 | 描述 |
| in | 如果在指定的序列中找到值返回 True,否则返回 False |
| not in | 如果在指定的序列中没有找到值返回 True,否则返回 False |
例如:

8.7 身份运算符
|--------|----------------------------|
| 运算符 | 描述 |
| is | 判断两个变量引用对象是否为同一个(同一块内存空间) |
| is not | 判断两个变量引用对象是否为不同一个(同一块内存空间) |
十、分支和循环
10.1 if语句
Python中的if语句和C/C++不同之处在于,if后的表达式不需要用括号括住 ,表达式后面需要带冒号
例如:

另外,C/C++中的else if在Python中也变为了elif,例如:

10.2 for循环
相比C/C++中的for循环,Python中的for循环只需要声明变量和循环的范围即可,例如:

range起到的作用就是创建一个序列,区间依旧是左闭右开
如果range省略第一个数则默认区间从0开始
我们也可以将range换为列表等

for循环的语法为:
for <var> in <sequence>:
<statements>
也就是说,只要<var>在<sqeuence>中,就执行下列<statements>中的语句
10.3 while循环
Python中的while循环和C/C++中的也类似,同样还是去掉括号并加上冒号

十一、函数
def 函数名(参数):
函数体
return ...
要定义一个函数,首先得以def关键字为开头,后接函数名和圆括号,括号内为需要的参数
例如写一个判断奇数的函数:

十二、文件操作
在Python中要想对一个文件进行操作,首先得打开这个文件
open函数用于打开一个文件,并返回一个file对象,其常用形式是接收两个参数:文件路径和模式
文件路径即我们需要打开的文件路径,模式则有很多个:
|----|----------------------------------------------------------------------------|
| 模式 | 描述 |
| r | 以只读方式打开文件。这是默认模式 |
| r+ | 打开一个文件用于读写 |
| w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件 |
| w+ | 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件 |
| a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入 |
| a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写 |
打开文件成功后会返回一个file对象,我们可以对这个file对象做一系列的操作,例如:
- file.readline():读取一整行
- file.readlines([size]) :返回包含size行的列表, size未指定则返回全部行
- file.read([size]):从文件读取指定的字节数
- file.write(str):将字符串写入文件(需要对应打开模式)
- f.close():关闭文件,一个文件被打开后最终也要被关闭
例如我们有一个在同目录下名为text.txt的文件,里面写了一句hello。我们以只读方式打开它

还有一种打开文件的方法可以省略手动关闭文件的操作,像这样:

如果文件有多行,我们可以用readlines返回一个包含了多行字符串的列表,然后用for循环遍历列表即可一次读取多行文件内容
关于Python的语法介绍就写到这,基本已经包含了大部分的基础语法内容了
如有错误欢迎在评论区指出