第 3 章 Python 核心基础
1. 字面量
1.1. 概述
来看这样一个场景:老师让学生把:姓名、年龄、体重写在纸上,纸上的文字,就是学生想要表达的内容,这些内容不需要计算、也不需要转换,就是字面上的含义,一看就能理解。

在程序中,也有上述这些“写出来就能被理解”的内容,这些内容在程序中叫做字面量,即:字面量就是直接写在代码中的“具体值”。
1.2. 写法
下面代码中的内容,都是字面量。
|
|
以上代码中的 ‘张三’、‘李四’、‘王五’ 均为字符串。所谓字符串,就是由“字符”组成的“串”。例如,字符串 ‘张三’ 由 ‘张’ 和 ‘三’ 两个字符构成。
从本质上看,字符串属于文本类型,可以由任意数量的字符组成——无论是中文、英文、数字,还是各种符号。此处我们只需对字符串的概念有初步认识,后续课程中将对其进行详细讲解。
注意:字符串必须要放到引号中,使用:单引号、双引号、三个单引号、三个双引号都可以,但必须是英文的引号。
备注:写在 Python 文件头部的字符串,会被自动识别成 docstring(文档字符串),文档字符串的主要作用是:对当前 Python 文件进行说明,且文档字符串必须用三个双引号。
|
|
2. 变量与常量
2.1. 变量
1.前情回顾
在上一节中,我们通过字面量的形式,记录了张三的体重,例如:
65.2
现在需要打印一些体重相关的内容,代码如下:
print(‘张三的体重是’, 65.2) print(‘对于’, 65.2, ‘这个体重,张三觉得不满意’) print(‘张三决定开始减肥,希望体重比’, 65.2, ‘还要小’)
小贴士:
-
使用print(内容)可以输出内容(也叫:打印内容)这里说的“打印”不是打印在纸上,而是指:把内容呈现在控制台上。
-
使用print(内容1, 内容2, 内容3)可以输出多个内容,不同内容之间用逗号做分隔,输出的多个内容默认会在同一行,且输出的多个内容之间会有一个空格。
备注:print()还有很多使用细节和技巧,后面会逐步介绍。
我们会发现,代码中的65.2被使用了 3 次,当要修改张三的体重为64.2时,就需要手动修改 3 个地方,修改起来会很麻烦,就像下面这样:
print(‘张三的体重是’, 64.2) print(‘对于’, 64.2, ‘这个体重,张三觉得不满意’) print(‘张三决定开始减肥,希望体重比’, 64.2, ‘还要小’)
2.什么是变量?
变量是数据的“代号”它可以和数据建立绑定关系,通过变量可以使用数据,或更新数据,之所以叫变量,是因为:它和某个值的绑定关系,可以随时改变。
例如:在上述代码中,我们可以把体重值和某个『变量』建立一个『绑定关系』,以后用到体重的时候,直接“呼唤”这个变量就可以了。
3.具体语法
语法为:变量名 = 值,例如下面代码中的:name、age、weight都是变量。
|
|
注意:变量名不需要加引号!
4.示例代码
使用weight变量存储体重值,并在后续代码中,多次使用weigth变量。
|
|
需要修改体重时,通过weight就可以修改,修改后再去使用weight时,就是修改后的值了。
|
|
5.几个关键点
-
在数学中,像 1 + 1 = 2这样的等式表示:等号左边的1 + 1是具体的运算过程,等号右边的2是该运算的结果。
-
在代码age = 18中,等号表示:将等号右侧的值与左侧的变量建立绑定关系。因此,当程序中需要表示年龄 18时,可以使用变量age;同样,也可以通过age来修改该数值。
-
age = 18这一行代码也被称为“赋值语句”,意思是将右侧的18赋给变量age。
-
在 Python 中,变量的创建与赋值是同时完成的。也就是说,当程序中出现一个变量时,它必须立即与某个值建立绑定关系。
-
变量名不应过于随意,命名时需要遵守一定的规则(具体命名规则将在下一小节讲解)。
2.2. 标识符命名规则
1.什么是标识符?
在程序中我们给: 变量、函数、类…..所起的名字,统称为标识符,即:在程序中所有我们可以自己起的名字,都是标识符。
2.标识符命名规则如下:
-
只能包含:数字、字母、下划线,且不能以数字开头,不能包含空格。
-
区分大小写,即Name和name是两个不同的标识符。
-
不能使用关键字(关键字的解释在下面)。
-
标识符尽量不要与内置函数同名。
-
标识符虽然没有长度限制,但应追求:简洁清晰,具有描述性。
3.Python 中的关键字
所谓“关键字”,是指那些:已被 Python 语言预先保留、具有特定含义和功能的标识符。这些关键字被系统征用,因而不能再作为变量名、函数名或其他标识符使用。
False None True and as assert async await break class continue def del elif else except finally for from global if import in is lambda nonlocal not or pass raise return try while with yield
备注:上述关键字暂不作详细说明。随着课程的推进,我们会在实际讲解中逐步接触并使用这些关键字,届时再进行深入解释。初学者无需在此阶段强行记忆(这也并不现实),随着使用频率的增加,便会在后续学习中自然掌握。
4.常见的三种命名风格
-
大驼峰(UpperCamelCase): 每个单词的首字母大写,例如:UserName
-
小驼峰(lowerCamelCase): 首词的首字母小写,后面单词首字母大写,例如:userName
-
蛇形(snake_case):单词间用下划线连接,例如:user_name
?Python 中推荐使用『蛇形(snake_case)』写法。
举几个例子:

2.3. 常量
1.什么是常量?
在程序中一旦被赋值,就不希望被修改的量(区别于变量)。
2.具体语法
Python 中一般约定使用全大写变量名来表示常量,涉及到多个单词时,用下划线做分隔。
|
|
3.Python 中没有强制的常量机制
当强制对常量进行修改时,最终也能改掉,但要自觉不改,这是 Python 程序员之间的约定。
|
|
3. 注释
3.1. 概述
注释是对代码的备注和解释,在代码执行的时,通常不起任何作用。
3.2. 注释的作用
注释的核心作用如下:
-
提高代码的可读性,通常用来辅助程序员快速理解代码的逻辑。
-
屏蔽掉暂时不需要的代码。
注意:在代码中编写清晰易懂的注释,是程序员的基本素养之一!
3.3. 单行注释
在 Python 中#后的一行内内容,会被视为注释。
|
|
关于注释的书写格式:
-
Python官方建议:在#和注释的内容之间加一个空格,在代码和#之间加两个空格。
-
上述的规则属于 Python 编码规范,规范的具体内容,我们会在课程中逐渐给各位渗透。
3.4. 多行注释
多行注释又称“块注释” ,Python 中的多行注释使用的是一组三引号(单引号,双引号都可以)。
1.多行注释可以换行,但不能嵌套。
|
|
2.多行注释本质是一个多行字符串。
注意:Python 中并没有真正的多行注释语法,所谓多行注释的本质其实还是字符串。
|
|
3.5. 文件编码注释
文件编码又称“字符编码”,文件编码注释写在 Python 文件的首行,是一种特殊的注释。
它的作用是:指定当前文件的字符编码。
|
|
4. 字符编码
4.1. 概述
计算机对数据会进行两个常见的操作,分别是:存储数据、读取数据。
-
- 存储数据时,计算机会进行编码。
-
- 读取数据时,计算机会进行解码。

编码与解码,会遵循一定的规范,这个规范就是字符编码,并且编码与解码,必须遵循相同的编码规范,若所用的规范不一致,就会出现乱码。
|
|
4.2. 常见编码方式
-
ASCII:大写字母、小写字母、数字、一些符号,共计 28个字符。
-
ISO 8859-1:在ASCII基础上扩展,支持西欧语言,共计 256 个字符。
-
GB2312:中国国家编码标准,收录约 6763 个简体中文常用汉字和符号。
-
GBK:兼容GB2312,进一步扩展,支持简繁体中文和其他汉字,共收录 2 万多个字符。
-
UTF-8:国际通用的编码格式,也叫“万国码”,支持世界所有语言的字符,包括:中文、英文、阿拉伯文、日文、韩文等,向下兼容ASCII,是现代互联网最常用的编码格式。
最佳实践:实际开发中,几乎都采用UTF-8编码保存文件。
备注:在 Python3 中,可以不写文件编码声明,因为 Python3 默认就使用UTF-8编码。
5. 数据类型
5.1. 概述
就像生活中的物品,都有自己所属的分类一样,数据也有自己所属的『数据类型』。
例如之前写过的这段代码:
|
|
-
‘张三’、“李四"这两个字面量,属于『字符串』类型。
-
18、22 这两个字面量,属于『整数』类型。
-
65.2、74.6这两个字面量,属『浮点数』类型。
三种最常见的数据类型:
| 类型名称 | 英文名 | 举例 | 说明 |
| 整型 | int | 5, -3, 0, 2025 | 整数(不带小数点的数) |
| 浮点型 | float | 3.14, -0.01 | 带小数点的数 |
| 字符串 | string | “Hello”, ‘Python’ | 文本,要用引号包起来 |
备注:数据类型不只上述的这三种,还有很多种,我们暂且先知道以上这三种即可,其他数据类型会在后续章节中逐步讲解。
5.2. 查看数据类型
通过type()可以查看数据类型,type()会返回当前数据的具体类型。
|
|
注意:在Python 中:变量无类型,数据有类型。
例如a = 10,其中a是没有类型的,但a所关联的数据10是有类型的,10是整型,我们经常说a是整型,其实是一种不太严谨的表述,严谨的表述应该是:a所对应的数据10是整型。
也可以把变量交给type(),最终返回的是:变量所对应的数据的类型。
|
|
当然也可以不使用变量接收,直接打印type()的结果
|
|
5.3. 整型
1.什么是整型?
所谓整型就是没有小数点的数字, Python 中的整型,可以是任意大小的整数,包括负整数。
2.分隔符
当书写很大的数时,可使用下划线将数字分组,使其更清晰易读;Python 自动忽略数字之间的下划线,并且这种写法也适用于浮点数,但要注意:此种写法只有 Python3.6 及以上版本才支持。
|
|
3.整型上限值
Python 中存储整数上限值的大小取决于:计算机的内存和处理能力,我们先来认识一下『幂运算符』,代码如下:
|
|
通过幂运算,构建一个很大的数,随后打印它,我们会发现:代码报错了。
|
|

上面报错中提及了"Exceeds the limit (4300 digits)",但这并不代表 Python 最大只能表示4300位的数,比如我们把print删掉,会发现代码正常运行,并且此时的a也是可以正常参与数学运算的。
|
|
那加上了print(a)为什么报错呢?原因如下:
调用print(a)时,Python 底层会把a的类型转换成『字符串类型』再输出,而从 Python3.11 起,Python 对超大整数转换字符串的长度进行了限制,默认位数是4300位。
扩展知识(了解即可):
通过如下代码,可以解除字符串转换时的4300位限制,如下代码中包含模块相关内容,我们还没有讲到,所以不必纠结下面代码的具体含义,只需要先知道:4300位的限制可以修改即可。
|
|
5.4. 浮点型
1.什么是浮点型?
所谓浮点型,就是带小数点的数字,比如:3.14、-0.5、2.0都是浮点数。
2.浮点型的表示方式
- 直接写
|
|
- 科学计数法
|
|
5.5. 字符串
1.字符的四种定义方式
| 写法 | 示例 | 适用场景 |
| 单引号 | ‘你好,尚硅谷’ | 单行字符串(不能直接换行,换行需要使用圆括号) |
| 双引号 | “你好,尚硅谷” | |
| 三个单引号 | ‘‘‘你好,尚硅谷’’’ | 多行字符串(可以直接换行) |
| 三个双引号 | “““你好,尚硅谷”””” |
下面代码所表示的都是字符串:
|
|
2.字符串的格式化输出
写法 1:直接用加号进行拼接,写起来很麻烦,而且只能是字符串之间拼接。
|
|
写法 2:使用占位符。
具体规则:
-
%s占位字符串
-
%f占位浮点数
-
%i占位整数
-
%d占位十进制的整数
-
%s是万能的(如果我们提供的数据不是字符串,那 Python 就会把数据转成字符串)。
|
|
写法 3:使用 f-string,这是目前 Python 最推荐的方式。
|
|
3.占位符精度控
在占位符前方,可以使用m.n的形式来指定精度,具体规则见下图:



示例代码:
|
|
4.转义字符
在字符串中,有些字符不能直接写(换行、制表符、引号等)这时就要使用转义字符。
例如下面的message字符串中包含了一个单引号,但如果就这样直接写,就会报错
|
|
使用转义字符后,即可正常输出:
|
|
常见的转义字符梳理:
| 转义字符 | 表示的含义 |
| ' | ' |
| " | " |
| \n | 换行 |
| \ | \ |
| \b | 删除前一个字符 |
| \r | 使光标回到本行开头,覆盖输出 |
| \t | 表示水平制表符(让光标跳转到下一个制表位) |
测试代码:
|
|
6. 数据类型转换
6.1. 概述
何为数据类型转换?—— 把一种类型的数据,变成另一种类型。
6.2. 为什么要数据类型转换
例如下面这些场景中,我们得到的数据类型,和最终要用的数据类型是不一致的,那就需要类型转换:
-
用户输入的内容是都是字符串,若需要进行数学运算,就必须进行数据类型转换。
-
对文件进行写入操作时,要将其他类型的数据转为字符串。
-
从数据库中读取出的内容都是字符串若需要进行数学运算,也需要数据类型转换
6.3. 具体转换方式
通过以下函数,可以对数据类型进行转换
| 函数 | 说明 | 示例 |
| int(x) | 将x转换为一个整数 | ![]() |
| float(x) | 将x转换为一个浮点数 | ![]() |
| str(x) | 将对象x转换为一个字符串 | ![]() |
7. 运算符
7.1. 算数运算符
常用的算数运算符如下:

测试代码
|
|
7.2. 赋值运算符
常用的赋值运算符如下:

测试代码:
|
|
7.3. 比较运算符
常用的比较运算符如下:

备注:True 和 False 是布尔类型,会在下一小节讲,暂且先知道:True 表示真,False 表示假。
|
|
小贴士:
-
字符串进行比较时,是依次比较每个字符的 Unicode 编码。
-
Unicode 编码是一种全球通用的字符编码标准,它会给每个字符都分配一个“身份证号”。
具体比较规则是:
-
从左到右,依次比较两个字符串中的字符。
-
先比较第一个字符:
-
- 如果两个字符不相等,就直接根据它们的 Unicode 码值比较大小。
-
- 如果相等,则继续下一步。
-
继续比较下一个字符,依次往后进行,直到遇到不相等的字符为止。
-
当出现不相等的字符时,比较它们的 Unicode 码大小,后续的字符将不再参与比较。

|
|
7.4. 布尔类型
我们之前讲的这些类型:字符串、整型、浮点型,这些类型中,每一种类型都有无限多的具体值。

但布尔类型的具体值,只有两个,分别是:True和False,其中:True表示真,False表示假。

布尔值常用于表示:条件是否成立、事件是否发生、操作是否成功、等逻辑状态。
注意:True 和 False 的首字母必须大写。
|
|
布尔类型是int类型的子类型,底层的本质是用1表示True,用0表示False。
|
|
Python中除0以外的任何数,转为布尔值后都为 True
|
|
Python中除空字符串以外的任何字符串,转为布尔值都是 True
|
|
7.5. 逻辑运算符
常用的逻辑运算符如下:

1.and 运算符:用于判断其两侧的值,是否都为True
|
|
and具备“逻辑短路”能力,以下代码中包含3/0这种错误代码,但最终没有报错。
|
|
and返回的不一定是布尔值,它返回的是某个参与计算的值本身,and会先看左边,如果左边是“假”,就直接返回左边,否则返回右边;若参与and运算的值不是布尔值,那 Python 会自动转为布尔值,然后再进行逻辑操作。
|
|
2.or 运算符:用于判断其两侧,是否至少有一个为True(只要有一个是True,那就返回True)
|
|
or同样具备“逻辑短路”的能力,以下代码中包含3/0这种错误代码,但最终没有报错。
|
|
or返回的也不一定是布尔值,它返回的是参与计算的值本身,or会先看左边,如果左边为“真”,就直接返回左边,否则返回右边;若参与or运算的值不是布尔值,那 Python 会自动转为布尔值,然后再进行逻辑操作。
|
|
3.not 运算符:not用于取反,不过要注意:如果参与not运算的值不是布尔值,那 Python 会自动将其转为布尔值,然后再进行逻辑操作。
|
|
not返回的值,一定是布尔值!
|
|
8. 进制
8.1. 概述
进制是指:用多少个符号,来表示数值的一种『记数方式』。比如我们平时使用的『十进制』,就是用0 ~ 9这十个符号来表示所有的数,而计算机中存储和运算的数据,都是二进制,常见的进制与规则如下:
二进制:0 ~ 1,满2进1。
八进制:0 ~ 7,满8进1。
十进制:0 ~ 9,满10进1。
十六进制:0 ~ 9,A-F,满16进1。
备注: 在十六进制中,除了0 ~ 9这十个数字外,还引入了字母,以便表示超过9的值,字母A对应十进制的10,字母B对应十进制的11,同理字母 C、D、E、F 分别对应十进制的:12、13、14、15。
各进制的表示如下图:

十进制数:9527

二进制数:1010

八进制数:1034

十六进制数:1CF
8.2. 代码中如何表示不同进制
在 Python 中,不同进制的数,有不同的前缀:
二进制:以0b或0B开头表示。
八进制:以0o开头表示
十进制:无需前缀,正常编写即可。
十六进制:以0x或0X开头表示,此处的A-F不区分大小写。
|
|
备注:Python 中所有的『非十进制』数字,只是代码层面的编写方式,只是给程序员看的,Python 在进行:计算、打印等操作时,会自动将这些『非十进制』数字,转为『十进制』数字。
|
|
8.3. 不同进制之间的转换
1.手动转换:使用连除法
十进制转二进制:不断用 2 去除这个数,直到商为 0,然后把每次的余数倒着写即可。
十进制转八进制:不断用 8 去除这个数,直到商为 0,然后把每次的余数倒着写即可。
十进制转十六进制:不断用 16 去除这个数,直到商为 0,把每次的余数倒着写,若余数 ≥ 10,则依次用 A、B、C、D、E、F 表示 10~15。

2.借助 Python 提供的内置函数,实现进制转换

9. 输入语句
在 Python 中,输入语句用于:从键盘接收用户输入的内容。
|
|
备注:程序执行到 input() 时,会暂停等待用户的输入,用户输入后敲下回车,程序继续运行。
input()所获取到的内容全都是字符串类型,不过我们可以手动进行数据类型转换。
|
|


