1 基础语法
1.1 字面量
含义:在代码中,被写下来的的固定的值,称之为字面量
1.1.1 常用的值类型
1.1.2 如何在代码中表达:
1.2 注释
注释:在程序代码中对程序代码进行解释说明的文字。
作用:注释不是程序,不能被执行,只是对程序代码进行解释说明,让别人可以看懂程序代码的作用,能够大大增强程序的可读性。
1.2.1 单行注释
以 #开头,#右边 的所有文字当作说明,而不是真正要执行的程序,起辅助说明作用
![]() |
![]() |
---|
1.2.2 多行注释
以一对三个双引号引起来 (“”“注释内容”“”)来解释说明一段代码的作用使用方法
1.3 变量
变量:在程序运行时,能储存计算结果或能表示值的抽象概念。
特征:变量存储的数据,是可以发生改变的。(为了重复使用)
1.4 数据类型
通过type()语句来得到数据的类型:
type(被查看类型的数据)
- 在print语句中,直接输出类型信息
- 用变量存储type()的结果(返回值)
- 通过type(变量)可以输出类型,查看的是:变量存储的数据的类型。因为变量无类型,但是它存储的数据有。
1.5 类型转换
如:
- 从文件中读取的数字,默认是字符串,我们需要转换成数字类型
- 后续学习的input()语句,默认结果是字符串,若需要数字也需要转换
- 将数字转换成字符串用以写出到外部系统
- 任何类型,都可以通过str(),转换成字符串
- 字符串内必须真的是数字,才可以将字符串转换为数字
- 浮点数转整数会丢失精度,也就是小数部分
1.6 标识符
标识符:是用户在编程的时候所使用的一系列名字,用于给变量、类、方法等命名。
规则:内容限定 / 大小写敏感 / 不可使用关键字
命名中只允许出现英文 / 中文 / 数字 / 下划线这四类元素,其余任何内容都不被允许。
规范:见名知意 / 下划线命名法 / 英文字母全小写
1.7 运算符
1.7.1 算术运算符
1.7.2 赋值运算符
1.7.3 复合赋值运算符
1.8 字符串扩展
1.8.1 字符串的三种定义方式
- 双引号定义法:“字符串”
- 单引号定义法:‘字符串’
- 三引号定义法:“”“字符串”“”
- 从三个引号开始,到下一个三个引号结束的范围内,均是字符串
- 三引号定义法,和多行注释的写法一样,同样支持换行操作。使用变量接收它,它就是字符串;不使用变量接收它,就可以作为多行注释使用。
如果定义的字符串本身包含单引号/双引号:
- 单引号定义法,可以内含双引号
- 双引号定义法,可以内含单引号
- 可以使用转移字符(\)来将引号解除效用,变成普通字符串
1.8.2 字符串拼接
通过+号完成:
字符串无法和非字符串变量进行拼接,因为类型不一致,无法接上
1.8.3 字符串格式化
通过**%s**,完成字符串和变量的快速拼接
- % 表示:我要占位
- s 表示:将变量变成字符串放入占位的地方
- 多个变量占位,变量要用括号括起来,并按照占位的顺序填入。
python支持的常用数据类型占位:
1.8.4 格式化的精度控制
浮点数19.99,变成了19.990000输出 — 需要“数字精度控制”
使用**辅助符号"m.n"**来控制数据的宽度和精度
- m,控制宽度,要求是数字(很少使用),设置的宽度小于数字自身,不生效
- .n,控制小数点精度,要求是数字,会进行小数的四舍五入
示例:
-
%5d:表示将整数的宽度控制在5位,如数字11,被设置为5d,就会变成:[空格][空格][空格]11,用三个空格补足宽度。
-
%5.2f:表示将宽度控制为5,将小数点精度设置为2
小数点和小数部分也算入宽度计算。如,对11.345设置了%7.2f 后,结果是:[空格][空格]11.35。2个空格补足宽度,小数部分限制2位精度后,四舍五入为 .35
-
%.2f:表示不限制宽度,只设置小数点精度为2,如11.345设置%.2f后,结果是11.35
通过**f"内容{变量}"**的格式来快速格式化,不做精度控制,也不理会类型,适用于快速格式化字符串。
1.8.5 对表达式进行格式化
表达式:一个具有明确结果的代码语句,如 1 + 1、type(“字符串”)、3* 5等
在变量定义的时候,如 age = 11 + 11,等号右侧的就是表达式,也就是有具体的结果,将结果赋值给了等号左侧的变量
在无需使用变量进行数据存储的时候,可以直接格式化表达式,简化代码:
- f"{表达式}"
- “%s\%d\%f”% (表达式、表达式、表达式)
1.9 数据输入
- input()语句的功能是,获取键盘输入的数据
- 可以使用:input(提示信息),用以在使用者输入内容之前显示提示信息。
- ⭐ 无论键盘输入什么类型的数据,获取到的数据永远都是字符串类型
2 判断语句(if语句)
2.1 布尔类型和比较运算符
布尔类型的字面量:
- True 表示真(是、肯定)
- False 表示假 (否、否定)
- 定义变量存储布尔类型数据:变量名称 = 布尔类型字面量
- 使用比较运算符进行比较运算得到布尔类型的结果
2.2 if语句
2.2.1 if语句的基本格式
- 判断语句的结果,必须是布尔类型True或False
- True会执行if内的代码语句,False则不会执行
![]() |
![]() |
---|
- 归属于if判断的代码语句块,需在前方填充4个空格缩进
- Python通过缩进判断代码块的归属关系
- else后,不需要判断条件
- 和if的代码块一样,else的代码块同样需要4个空格作为缩进
- elif 语句可以写多个,空格缩进同样不可省略
2.2.2 判断语句的嵌套
有很多场景,不仅仅是多个并列条件,还会有满足前置条件才会二次判断的多层判断需求。
![]() |
![]() |
---|
嵌套的关键点,在于:空格缩进,通过空格缩进来决定语句之间的:层次关系
2.3 循环语句(while语句和for语句)
2.3.1 while循环
2.3.1.1 while循环的基础语法
- 只要条件满足,会无限循环执行
- while的条件需得到布尔类型,True表示继续循环,False表示结束循环
- 需要设置循环终止的条件,如i += 1配合 i < 100,就能确保100次后停止,否则将无限循环
- 空格缩进和if判断一样,都需要设置
2.3.1.2 while循环的嵌套应用
- 同判断语句的嵌套一样,循环语句的嵌套,要注意空格缩进。
- 基于空格缩进来决定层次关系
- 注意条件的设置,避免出现无限循环(除非真的需要无限循环)
2.3.2 for循环
2.3.2.1 for循环的基础语法
while循环的循环条件是自定义的,自行控制循环条件;for循环是一种”轮询”机制,从待处理数据集中逐个取出数据赋值给临时变量。
- 循环内的语句,需要有空格缩进。
- 同while循环不同,for循环无法定义循环条件,只能被动取出数据处理。
- 只能从被处理的数据集中依次取出内容进行处理,所以理论上讲无法构建无限循环(被处理的数据集不可能无限大)。
2.3.2.2 range语句
range(num):获取一个从0开始,到num结束的数字序列(不含num本身) 如:range(5) — [0, 1, 2, 3, 4]
range(num1,num2):获得一个从num1开始,到num2结束的数字序列(不含num2本身) 如:range(5, 10) — [5, 6, 7, 8, 9]
range(num1, num2, step):获得一个从num1开始,到num2结束的数字序列(不含num2本身)数字之间的步长,以step为准(step默认为1) 如:range(5, 10, 2) — [5, 7, 9]
2.3.2.3 变量作用域
.for循环中的临时变量,其作用域限定为:循环内
- 是编程规范的限定,而非强制限定
- 不遵守也能正常运行,但是不建议这样做
- 如需访问临时变量,可以预先在循环外定义它
2.3.2.4 for循环的嵌套应用
和while循环一样,需要注意缩进,通过缩进确定层次关系
2.4 循环中断(break和continue)
continue关键字:
- 中断本次循环,直接进入下一次循环;
- 可以用于for循环和while循环,效果一致;
- 只可以控制它所在的循环临时中断;
break关键字:
- 直接结束所在循环
- 可以用于for循环和while循环,效果一致
- 只可以控制它所在的循环永久中断
3 函数
3.1 函数的定义
函数:是组织好的,可重复使用的,用来实现特定功能的代码段。
优点:
- 提高程序的复用性,减少重复性代码,提高开发效率
- 将功能封装在函数内,可供随时随地重复利用
3.1.1 调用
函数名(参数)
- 参数/返回值如不需要,可以省略
- 函数必须先定义后使用
3.2 函数的参数
传入参数:在函数进行计算的时候,接受外部(调用时)提供的数据
定义:
函数定义中的参数称为形式参数(形参),参数之间使用逗号分割。
函数调用中的参数称为实际参数(实参),按照顺序传入数据,使用逗号分隔。
传入参数的数量是不受限制的,可以不使用参数,也可以仅使用任意N个参数。
3.2.1 位置参数
调用函数时根据函数定义的参数位置来传递参数
传递的参数和定义的参数的顺序及个数必须一致
3.2.2 关键字参数
函数调用时通过**“键=值”**形式传递参数.
作用: 可以让函数更加清晰、容易使用,同时也清除了参数的顺序需求。
⭐ 函数调用时,如果有位置参数,必须在关键字参数的前面,但关键字参数间不存在先后顺序。
3.2.3 缺省参数
缺省参数(默认参数):用于定义函数,为参数提供默认值,调用函数时可不传该默认参数的值
作用:当调用函数时没有传递参数,就会使用默认是用缺省参数对应的值.
⭐ 所有位置参数必须出现在默认参数前,包括函数定义和调用
⭐ 函数调用时,如果为缺省参数传值,则修改默认参数值, 否则使用这个默认值。
3.2.4 不定长参数
不定长参数(可变参数):用于不确定调用的时候会传递多少个参数(不传参也可以)的场景。
3.2.4.1 位置传递
传进的所有参数都会被args变量收集,它会根据传进参数的位置合并为一个元组(tuple)。
![]() |
![]() |
---|
3.2.4.2 关键字传递
参数是**“键=值”的形式**的情况下, 所有的“键=值”都会被kwargs接受, 同时会根据“键=值”组成字典。
3.3 函数的返回值
3.3.1 返回值
“返回值”,就是程序中函数完成事情后,最后给调用者的结果
⭐ 函数体在遇到return后就结束了,所以写在return后的代码不会执行。
3.3.2 多返回值
按照返回值的顺序,写对应顺序的多个变量接收即可
变量之间用逗号隔开,支持不同类型的数据return
3.3.3 None类型
如果函数没有使用return语句返回数据,函数也有返回值。无返回值的函数,实际上就是返回了:None这个字面量,其类型是:<class ‘NoneType’>
用法:
- 用在函数无返回值上
- 用在if判断上
- 在if判断中,None等同于False
- 一般用于在函数中主动返回None,配合if判断做相关处理
- 用于声明无内容的变量上
- 定义变量,但暂时不需要变量有具体值,可以用None来代替
3.4 函数说明文档
通过多行注释的形式,对函数进行说明解释,其内容应写在函数体之前。
![]() |
![]() |
---|
3.5 函数的嵌套调用
嵌套调用:一个函数里面又调用了另外一个函数
函数A中执行到调用函数B的语句,会将函数B全部执行完成后,继续执行函数A的剩余内容
3.6 变量的作用域
作用域:变量的作用范围(变量在哪里可用,在哪里不可用)
3.6.1 局部变量
局部变量:定义在函数体内部的变量,即只在函数体内部生效。
作用:在函数体内部,临时保存数据,即当函数调用完成后,则销毁局部变量。
![]() |
![]() |
![]() |
---|
3.6.2 全局变量
全局变量:在函数体内、外都能生效的变量
3.6.3 global关键字
使用global关键字可以在函数内部声明变量为全局变量
3.7 匿名函数
3.7.1 函数作为参数传递
- 函数本身是可以作为参数,传入另一个函数中进行使用的。
- 将函数传入的作用在于:传入计算逻辑,而非传入数据。
3.7.2 lambda匿名函数
- def关键字,可以定义带有名称的函数
- lambda关键字,可以定义匿名函数(无名称)
有名称的函数,可以基于名称重复使用;无名称的匿名函数,只可临时使用一次。
lambda 传入参数: 函数体(一行代码)
- 传入参数表示匿名函数的形式参数,如:x, y 表示接收2个形式参数;
- 函数体 — 函数的执行逻辑,只能写一行,无法写多行代码。
4 数据容器
数据容器:一种可容纳多份数据的数据类型,容纳的每一份数据称之为1个元素。
每一个元素,可以是任意类型的数据,如字符串、数字、布尔等。
4.1 list(列表)
4.1.1 定义
列表内的每一个数据,称之为元素。
- 以**[ ]**作为标识
- 列表内每一个元素之间用**, 逗号**隔开。
- 各元素可以为不同的数据类型,支持嵌套。
4.1.2 下标索引
列表[下标索引]:用于取出特定位置的元素
对于嵌套列表:
⭐ 下标索引的取值范围,超出范围无法取出元素,并且会报错。
4.1.3 常用操作
列表.index(元素) | 查找指定元素在列表的下标,如果找不到,报错ValueError。 |
---|---|
列表[下标] = 值 | 直接对指定下标(正向、反向下标均可)的值进行:重新赋值(修改)。 |
列表.insert(下标, 元素) | 在指定的下标位置,插入指定的元素。 |
列表.append(元素) | 将指定元素,追加到列表的尾部。 |
列表.extend(其它数据容器) | 将其它数据容器的内容取出,依次追加到列表尾部。 |
del 列表[下标] | 删除元素 |
列表.pop(下标) | 删除元素 |
列表.clear() | 清空列表内容 |
列表.count(元素) | 统计某元素在列表内的数量 |
len(列表) | 统计列表共有多少元素 |
4.1.4 遍历
4.1.4.1 while循环
使用列表[下标]的方式取出列表元素
定义一个变量表示下标,从0开始,循环条件为 下标值 < 列表的元素数量
index = 0
while index < len(列表)
元素 = 列表[index]
对元素进行处理
index += 1
4.1.4.2 for循环
for 临时变量 in 数据容器:
对临时变量进行处理
- 在循环控制上:
- while循环可以自定循环条件,并自行控制
- for循环不可以自定循环条件,只可以一个个从容器内取出数据
- 在无限循环上:
- while循环可以通过条件控制做到无限循环
- for循环理论上不可以,因为被遍历的容器容量不是无限的
- 在使用场景上:
- while循环适用于任何想要循环的场景
- for循环适用于遍历数据容器的场景或简单的固定次数循环场景
4.2 tuple(元组)
4.2.1 定义
定义元组使用小括号,且使用逗号隔开各个数据,数据可以是不同的数据类型。
- 元组只有一个数据时,后面要添加逗号。
- 一旦定义完成,就不可修改。
- 元组也支持嵌套。
# 定义元组字面量
(元素, 元素, ..., 元素)
# 定义元组变量
变量名称 = (元素, 元素, ..., 元素)
# 定义空元组
变量名称