一. 条件测试
1.1 比较运算
a > b
a < b
if (条件):
执行代码
条件中数据结构不为空,变量不为0,None,False则条件成立
1.2 逻辑运算
与 或 非(and or not)
运算优先级:
非 > 与 > 或
1.3 存在运算
ele in iter()
:元素是否存在于容器中
ele not in iter()
:元素是否不存在于容器中
二. 分支结构–if语句
2.1 单分支
if 条件:
do
2.2 二分支
if 条件:
do
else:
do
2.3 多分支
if 条件:
do
elif:
do
elif:
do
else:
do
2.4 嵌套语句
if的执行语句里面还有if语句
三. 遍历循环–for循环
3.1 主要形式
for ele in iter:
do
从可迭代对象中其次取出一个元素,进行相应操作
3.1.1 直接迭代
对应–列表 元组 集合 字符串
3.1.2 变换迭代
对应–字典
3.1.3 range()对象
for i in range(100):
do
3.1.4 break与continue
continue
:结束本次循环
break
:结束循环体
3.1.5 for与else的配合
如果for循环全部执行完毕,没有被break终止,就运行else
四. 无限循环–while循环
4.1 while循环一般形式
while 条件:
do
#条件为真,执行语句
#条件为假,循环结束
4.2 while与break,continue
同for循环内的使用
4.3 while与else
同for循环内的使用
五. 控制语句注意问题
5.1 尽可能减少多层嵌套
多层嵌套可读性很差
5.2 避免死循环
会不断运行
5.3 封装过于复杂的判断条件
构造成函数
六. 函数
6.1 函数的定义与调用
6.1.1 定义函数的原因
- 提高代码复用性
- 模块化思想
- 利于代码维护
6.1.2 函数的定义与调用
定义
def funtion_name(参数):
函数体
return 返回值
调用
函数名(参数)
6.1.3 参数传递
位置参数:
1. 形参:函数定义时的参数,变量名
2. 实参:函数调用时的参数,变量值
3. 要严格按照位置顺序赋值
关键字参数:
1. 打破位置限制,用形参=实参进行值的传递
2. 位置参数必须放在关键字参数之前
默认参数:
1. 默认参数必须放在非默认参数后面
2. 调用函数时可以不对该形参传值*
3. 默认参数应该设置为不可变类型!不然会保存上次调用的结果
def add(ls = []):
print(id(ls))
ls.append(a)
print(id(ls))
print(ls)
add() #[1]
add() #[1,1]
可变长参数:*args:
不知道会传过来多少参数,用*args接受
该参数必须放在参数列表最后!
实参打散
*list
:
打散的是列表,字符串,元组或集合
可变长参数 kwargs:
多余的参数用字典形式打包传递
以a=3,b=2这样传递
字典形参打散**:
**dict
:
打散是为了方便参数接收
6.1.4 函数体与变量作用域
函数体就是一段在函数调用时才会执行的代码
局部变量:
仅在函数体内定义和发挥作用
全局变量
可以在函数体内直接调用
global z
:在函数体内定义全局变量
6.1.5 函数的返回值
单个返回值:
多个返回值:以元组的形式
return语句的执行代表函数运行的结束
没有return语句返回的是None
6.2 几点建议
- 函数和参数的命名应该有实际意义
- 对函数功能最好有注释
- 函数定义前后空两行
- 默认参数赋值等号两侧不加空格
6.3 匿名函数
6.3.1 基本形式
lambda 变量:函数体
ls = [(93, 88), (79, 100), (86, 71), (85, 85), (76, 94)]
ls.sort(key=lambda x:x[1])
max(ls,key=lambda x:x[1])
$\color{#32CD32}{占楼}$