python测试开发班-28期-yf-python学习笔记-语法与数据结构

python 基础语法

输入与输出

1.input()函数获取键盘输入,键盘输入任何数据以字符串保存,input()函数返回字符串
例如:
name=input()
print(name)
2.print()函数输出文本和变量
格式:print(values,sep=“”,end=“\n”)
values:需要输出的数据
sep=“” :多个数据之间的分割符,默认一个空格
print(“Hello”, “Python”, 20, True, sep=‘—’)

end=“\n”:一次输出后的结束符,默认为换行符

函数定义

函数是一段可重复使用的代码块,它执行特定的任务并返回一个结果。

在编程中,函数用于将一段代码逻辑封装起来,以便在需要时可以方便地调用
函数主要目的是提高代码的重用性和可维护性
函数组成:
1.函数名:函数名用于标识函数,以便在代码中调用它时使用
2.函数的的传入参数:函数执行需要的数据
3.函数体:函数体是函数的实际代码逻辑,
4.返回值:返回值是函数体代码执行过后的运行结果
内置函数:
开发语言中定义好的特定功能函数,可直接使用
函数定义:
定义好的特定功能函数不足以使用,大部分自己开发自定义函数
语法形式:
def function_name([parameter_list]):
[‘’‘注释信息’‘’]
[function_body]
return [result]
def:自定义函数关键字
function_name:函数名称,在函数调用时使用,命名规范要符合实际应用
()函数的特征,用来书写参数列表
parameter_list:函数参数,接收的外部数据
:固定语法
function_body 函数体,实现函数功能的逻辑代码
return:函数返回值
函数调用
function_name([parameters_value])

  • function_name:函数名称,要调用的函数名称,必须是已经创建好的(包括内建的和自定义的)。
  • parameters_value:参数列表,用来提供函数运行时使用的数据,可省略。
  • (): 函数的特征,参数列表可省略,但圆括号不能省略

标识符号

###命名规范
4项原则
1.见名知意
2.不能使用关键字
3. 标识符由英文字母、下划线_和数字组成,但不能以数字开头
4. 区分大小,大小写敏感

关键字

关键字是指在 Python 编程语言中具有特殊含义的保留单词。这些关键字被 Python 解释器用于识别程序的结构和语义,从而执行相应的操作。

变量

变量的概念:
处理数据需要使用变量表示数据,变量就是用来表示数据的名字
变量的定义:
将数据通过等号(=)赋值给一个符合命名规范的标识符
变量的使用
指在程序中引用一个已经定义的变量
变量的地址:
内置函数 id() 可以获取变量的内存地址,也就是这个变量在计算机内存中的唯一标识,通常是用一串数字表示
每个变量在内存中都有一个唯一的地址,通过比较两个变量的内存地址,可以判断它们是否是同一个变量

python数据类型

python3 中标准数据类型:

number 数字
String 字符串
bool 布尔类型
复合数据类型:容器类型
list 列表
Tuple 元组
Dictionary(字典)
Set 集合
···空类型
None
根据数据特性可分为:
··>不可变数据(4个):
number 数字 、 bool 布尔 、String (字符串) 、 Tuple(元组)
··>可变数据3个
list 列表 Dictionary 字典 set 集合
类型查看
type(变量)

数字类型

· 整数: 用来表示整数数值,即没有小数部分的数值,在 Python 中,没有 Long 类型,统一使用 int 类型表示
· 浮点数: 没有 Double 类型,统一使用 float 类型表示
· 复数:

布尔类型

布尔类型只有两个值,即 TrueFalse 表示真和假,在 Python 中,布尔类型通常用于判断逻辑关系和状态标记
条件判断:
判断某个条件真假
状态标记:
程序开发过程中,经常需要标记一些状态,比如是否选中,是否点击等,都可以使用记录布尔值的变量记录状态
isSelect
isExist

类型转换

·· 自动转换
自动转换也称为隐式类型转换,程序在执行过程中自动完成,将数据精度低转换为数据精度高的类型
n = 10 + 3.14 转换为浮点数
n = False + 1 转换成整型

·· 强制转换
强制转换也称为显式类型转换,需要在代码中使用类型函数来转换。

比如通过 input() 函数获取的数字,实际为一个数字字符串,如果需要进行计算,需要将其转换成真正的数字才能进行数据计算
不能转换,会导致出错或无法正常运行
Python 提供了多种类型转换的函数
int(x):将 x 转换为整数
float(x):将 x 转换为浮点数
complex(x):将 x 转换为复数
bool(x):将 x 转换为布尔值。如果 x 是一个空对象、0、空字符串、空列表、空元组、空字典或者 False,那么将返回 False,否则将返回 True
str(x):将 x 转换为字符串
chr(x): 将一个整数转换为一个字符
如果在强制类型转换时,传递的转换数据不合法导致无法转换,那么将会抛出异常

python运算符
运算符概念:运算符是用于进行各种运算操作的符号或关键词

Python 语言常用运算符:
··算术运算符:+ 加法 ,- 减法 *乘法 / 除法
% 取模,两个操作相除,取余数为计算结果
** 幂运算 :返回x的y次幂
// 整除 : 两个操作数相除,取商,结果为整数类型
··比较运算符/关系运算符

运算符 描述
== 等于 : 比较对象是否相等
!= 不等于 : 比较两个对象是否不相等
> 大于 : 返回x是否大于y
< 小于 : 返回x是否小于y
>= 大于等于 : 返回x是否大于等于y。
<= 小于等于 : 返回x是否小于等于y。
··赋值运算符
运算符 描述
= 简单的赋值运算符
+= 加法赋值运算符
-= 减法赋值运算符
*= 乘法赋值运算符
/= 除法赋值运算符
%= 取模赋值运算符
**= 幂赋值运算符
//= 取整除赋值运算符
··逻辑运算符
运算符 描述
and 逻辑与 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。
or 逻辑或 如果 x 是非 0,它返回 x 的计算值,否则它返回 y 的计算值。
not 逻辑非:如果 x 为 True,返回 False 。如果 x 为 False,它返回 True

··成员运算符

运算符 描述
in 如果在指定的序列中找到值返回 True,否则返回 False。
not in 如果在指定的序列中没有找到值返回 True,否则返回 False。

··身份运算符

运算符 描述
is is 是判断两个标识符是不是引用自一个对象
is not is not 是判断两个标识符是不是引用自不同对象

is 和 == 的区别

在 Python 中,万物皆对象,而对象的三个基本要素:

  • 内存地址
  • 数据类型

is== 都作为常用的判断语句去进行使用,这两者之间的主要区别是:

  • == 运算符: 只比较两个对象的值,相同返回 True,不同返回 False
  • is 运算符: 比较两个对象的id,相同返回 True,不同返回 False
    is 比较内存地址
    ··运算符优先级
    Python 运算符优先级如下表所示:
运算符 描述
(expressions…) 绑定或加圆括号的表达式
[expressions…], {key: value…}, 列表显示,字典显示,集合显示
x[index], x[index:index], x(arguments…), x.attribute 抽取,切片,调用,属性引用
** 乘方 5
+x, -x 正,负
*, @, /, //, % 乘,矩阵乘,除,整除,取余 6
+, - 加和减
in, not in, is, is not, <, <=, >, >=, !=, == 比较运算,包括成员检测和标识号检测
not 布尔逻辑非 NOT
and 布尔逻辑与 AND
or 布尔逻辑或 OR
if – else 条件表达式
=, +=, -=, *=, /=, //=, **= 赋值表达式

根据使用操作数的不同,可分为:

  • 单目运算符

  • 双目运算符

  • 三目运算符
    语法格式: [on_true] if [expression] else [on_false]

  • on_true: 条件为真时的结果

  • on_false: 条件为假时的结果

  • expression: 判断条件
    例如:
    print(“Yes” if True else “No”)
    print(“Yes” if False else “No”)

数据结构

字符串:字符串是由引号包裹的任意字符组成的不可变序列,用于表示文本类型数据
可以通过使用单引号双引号三引号 来定义
转义字符
\n 表示换行符,\t 表示制表符,\" 表示双引号,\' 表示单引号,\\ 表示反斜杠。
字符串下标: 下标是指从 0 开始的数字编号,也称为索引,越界会报错
字符串常用函数方法:
len():获取参数字符串的字符个数,返回值类型为int
count(): 返回 strstring 里面出现的次数,如果 start 或者 end 指定则返回指定范围内 str 出现的次数 格式:count(str, start, end),返回值为int
index:
index() 检测 sub 是否包含在 string 中,如果 startend 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则抛出一个异常 格式:index(sub, start, end),返回值是int,字符出现的位置参数
rindex() 作用同 index() ,查找子串时从右侧查找,若找不到会抛出一个异常 格式:rindex(sub, start, end)
find() 检测 sub 是否包含在 string 中,如果 startend 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1 格式,返回值为int类型
rfind :rfind() 作用同 find() ,查找子串时从右侧查找,若找不到会抛出一个异常 格式:rfind(sub, start, end)
replace() 把 string 中的 old 替换成 new,如果 max 指定,则替换不超过 max 次. 格式:replace(old, new, max)

字符串格式化

format()方法是一种传统的字符串格式化方法。它使用占位符 {} 来表示要插入的变量或值,并通过传递参数来替换这些占位符
在调用 format() 方法时,通过参数的顺序将相应的值传递给占位符,从而替换字符串中的占位符部分
通过在 format() 方法中按照顺序传递相应的参数,就可以根据索引号将值插入到指定的位置
format()方法还支持使用关键字参数来指定变量或值的插入位置

format() 方法中,还可以使用格式化选项来控制插入值的格式,如字段宽度、对齐方式、小数点精度等
{:.2f} 是一个格式化选项,它指定了插入的值应该被格式化为带有两位小数的浮点数
例如:
pi = 3.141592653589793
formatted_pi = “The value of pi is approximately {:.2f}”.format(pi)
输出:the value of pi is approximately 3.14

f-string是Python 3.6及更高版本引入的一种简洁且直观的字符串格式化方法。它使用前缀f 定义字符串,并使用花括号 {} 来插入变量或值
f-string 的格式化选项方式使用同 format()函数一致

在f-string中,可以使用表达式和函数调用来生成动态的字符串内容

字符串格式化的更多用法

除了简单的变量插入,字符串格式化还支持更多的格式控制选项

  • 设置字段宽度和对齐方式
  • 控制字段宽度和对齐方式
  • 设置小数点精度和浮点数格式化
  • 格式化日期和时间
  • 格式化数字的千位分隔符
  • 使用填充字符进行对齐
  • 格式化二进制、十六进制和其他进制数值

总结:
总结

  • 字符串格式化是将变量或值插入到字符串中的特定位置的过程。
  • Python提供了多种字符串格式化的方法,包括format()方法和f-string。
  • format()方法使用占位符 {} 进行变量插入。
  • f-string使用前缀f定义字符串,并使用花括号 {} 进行变量插入。
  • 字符串格式化还支持更多的格式控制选项,例如字段宽度、小数点精度等。
  • 通过掌握字符串格式化的方法,你可以在字符串中动态地插入变量或值,创造出灵活且有动态内容的字符串。这将提高你的编程效率并增强代码的可读性

元组

元组是一种数据类型,在Python中用于存储多个元素,元组是有序的数字结构,元组是不可变的,元组是异构的可以包含不同类型的元素
元组的字面量定义
元组使用小括号 () 来定义,元组中的元素通过逗号 , 进行分隔,每个元素都可以是不同的数据类型
使用小括号 () 来创建一个空元组。如果没有任何元素需要添加到元组中,空无组没有任何实际意义
定义无组时,逗号是必须的,即使元组只包含一个元素,也需要在元素后面加上逗号,以区分它是一个元组而不是其他数据类型。

元组的构造方法定义
可以通过元组的构造方法定义元组。 当使用构造方法定义元组时,参数只能是可迭代的对象,构造方法会将参数中的元素构造成为元组的元素。 可以理解为将可迭代的对象强制类型转换为元组
元组中元素的引用
元组同字符串一样,也可以使用下标形式引用元组中的元素。并且,下标不能超过元组的元素个数减1,否则会抛出下标越界错误
元组切片:元组的切片操作同字符串一致

元组特点:
有序性:元组中的元素按照添加顺序进行存储,并且可以通过索引来访问和引用。这意味着元组中的元素保持其原始顺序,不会发生改变
不可变性:元组的元素是不可修改、删除或添加的

元组的应用场景:
存储一组不可变的数据
作为字典的键值对
函数多个返回值

元组的常用方法:
len() 获取元组元素个数 格式:len(元组对象)
count() 统计元组中参数 value 指定值的个数
index() 在元组中查找 value 第一次出现的下标。如果指定了范围,则仅在指定范围内查找

列表

列表是一种有序、可变,异构的数据集合,可以存储多个不同类型的元素
特点:

  • 有序性:列表中的元素按照添加的顺序进行存储,每个元素都有一个对应的索引,可以通过索引访问和操作列表中的元素。
  • 可变性:列表是可变的,也就是说可以通过索引来修改、删除或插入元素。可以改变列表的长度、内容和顺序。
  • 可存储不同类型的元素:列表中可以同时存储不同类型的数据,例如整数、字符串、浮点数、布尔值等。甚至可以存储其他列表或其他复杂的数据结构

列表定义
Python 中使用中括号定义列表
例如:
l1 = # 创建一个空列表
由于列表具有可变性,所以空列表的定义是被允许且有意义的

列表的构造方法定义

可能通过列表的构造方法定义列表。 当使用构造方法定义列表时,参数只能是可迭代的对象,构造方法会将参数中的元素构造成为列表的元素。 可以理解为将可迭代的对象强制类型转换为列表

列表元素的引用
列表同字符串,元组一样,也可以使用下标形式引用列表中的元素
列表中元素的修改
由于列表的可变特性,可以通过下标的方式,对列表中的元素进行赋值修改

列表的切片
列表的切片操作同字符串,元组一致
例如:
l = [1,2,3,4,5]
print(l[0:3])
print(l[:3])
print(l[3:])
print(l[:])
print(l[::-1])
列表的用途:
存储一组相关的数据
数据的容器
算法和数据结构中的应用

列表操作

len(列表对象),获取列表元素个数
count(value)在列表中统计参数value出现的次数
index(value, start, stop) 在列表中查找参数 value 第一次出现的下标位置
增加元素:
append(value)向列表最后追加元素
extend(iterable) 将一个可迭代对象的元素依次添加到列表最后 insert(index, value) 向列表指定下标位置插入一个元素,原有元素依次后移,如果指定下标超过元素个数,则插入到列表最后
删除元素
del 可以使用 del 关键字结合索引来删除指定位置的元素。如果指定的下标不存在则抛出一个错误。
remove(value) 在列表中删除第一个指定的数据,如果删除的数据不存在则抛出错误 pop(index) 从列表中取出并删除指定下标位置的元素,默认取出并删除最后一个元素,如果指定下标不存在,则会抛出一个错误
clear() 清空列表
列表排序
sort(key, reverse) 对列表进行排序

  • ort方法默认对基本数据类型进行升序排序
  • reverse参数将列表元素排序后将列表逆序,实现降序排序
  • key 参数用来指定排序规则,比如使用学生的年龄进行排序(此处不讲解该参数的使用,在lambda处讲解)

列表和元组的区别

相同点:元组和列表在Python中,都是有序的,可迭代的数据结构。
元组和列表都是异构的,都可以存放不同数据类型的元素。
不同点:元组是不可变的,不可以进行增删改操作,一旦定义,无法修改
列表是可变的,可以对列表中的元素进行增删改操作,空列表有实际意义,空元组无意义
内存占用不同:
由于元组与列表内部的实现机制不同,在相同元素和个数的情况下,元组占用内存空间更小
总结对比

对比 元组 列表
定义 (1, 2, 3) [1, 2, 3]
修改 不支持 支持
添加 不支持 支持
删除 不支持 支持
索引访问 支持 支持
切片 支持 支持
遍历 支持 支持
应用场景 固定的,不会被修改的数据 不固定的,可以被修改的数据
占用内存 较小 较大

字典

字典定义
字典是Python中的一种容器数据类型,用于存储键值对(key-value)的数据集合
Python 中使用花括号,保存key-value形式表示字典
key 必须是一个可哈希的对象,可以使用 hash() 函数来判断数据是否可哈希。
字典的字面量定义
d1={}
d2 = {“name”: “Alice”, “age”: 25, “gender”: “female”}
构造方法定义字典
d1 = dict(one=1, two=2, three=3)
d2 = dict([(‘two’, 2), (‘one’, 1), (‘three’, 3)])
d3 = dict(((‘two’, 2), (‘one’, 1), (‘three’, 3)))
d4 = dict([(‘two’, 2), [‘one’, 1], (‘three’, 3)])
d5 = dict({‘one’: 1, ‘two’: 2, ‘three’: 3})
d6 = dict({‘one’: 1, ‘three’: 3}, two=2)
解包方法
d7 = dict(zip([‘one’, ‘two’, ‘three’], [1, 2, 3]))

字典数据访问
字典使用 key 来获取对应的键值
格式:字典对象[key]
例如
stu = {“name”:“Tom”, “age”: 23, “gender”:“male”}
print(stu[“name”])
print(stu[“age”])

字典元素添加与修改

字典中的每一个元素都以键值对形式表示,一个key对应一个value, 在一个字典中,key具有唯一性,当给一个key赋值时,如果key在当前字典中不存在,则是添加数据,如果key存在,则对当前key所对应的值进行修改更新

格式:字典对象[key] = value
例如:
stu = {“name”:“Tom”, “age”: 23, “gender”:“male”}
print(stu)
添加新元素
stu[“address”] = “BeiJing”
print(stu)
修改数据
stu[“name”] = “Jack”
stu[“address”] = “ShangHai”
print(stu)
字典元素的删除
字典也可以使用 del 通过key删除元素,当删除元素时,整个键值对都会被删除。
格式:del 字典对象[key]
例如:
stu = {‘name’: ‘Tom’, ‘age’: 23, ‘gender’: ‘male’, ‘address’: ‘BeiJing’}
print(stu)
删除元素
del stu[‘age’]
print(stu)
在Python 3.7及更高版本中,字典被认为是有序的,即它们可以保持键值对的添加顺序。这意味着当遍历字典或打印字典时,键值对的顺序与它们添加到字典中的顺序相同。这种有序性是字典的内置特性,不需要额外的操作
在Python 3.6及更早版本中,字典是无序的,无法保持键值对的顺序。这意味着当遍历字典或打印字典时,键值对的顺序是不确定的,可能与它们添加到字典中的顺序不同
如果在编程中需要依赖字典键值对的顺序,建议使用Python 3.7及更高版本以确保有序性
字典的应用场景
字典适用于存储具有相关性的数据
字典提供了快速查找和访问数据的能力,通过键可以直接定位对应的值,而不需要遍历整个字典
字典作为数据的容器,提供了丰富的操作方法,可以方便地进行遍历、搜索、插入和删除操作

字典操作

keys() 用来获取字典中所有的 key, 保存到一个列表中,并以 dict_keys 类型返回
values() 用来获取字典中所有的value, 保存到一个列表中,并以 dict_values 类型返回
items() 用来获取字典中所有的键值对,每一个元素键值对都以一个元组保存,将所有元素元组保存到一个列表中,并以 dict_items 类型返回
get(key, default) 用来获取key对应的值,如果指定的key不存在,则返回默认值
例如:
stu = {‘name’: ‘Tom’, ‘age’: 23, ‘gender’: ‘male’, ‘address’: ‘BeiJing’}
print(stu.get(“name”))
print(stu.get(“hobby”))
print(stu.get(“hobby”,“无数据”))

字典添加更新操作
setdefault(key,default)给一个不存在的key添加一个默认值并将该键值对保存到字典中 在一些场景下,字典的key存在,但是该key却没有对应的值,此时,就可以使用该方法,为当前的key添加一个默认值。比如服务端要保存客户端发起请求时携带的请求头中的信息fromkeys(keys,val) 用于创建一个新字典,以序列 keys 中元素做字典的键,value 为字典所有键对应的初始值,默认为None`
例如:
ks = (“name”, “age”, “gender”)
s1 = dict.fromkeys(ks)
print(s1)

s2 = dict.fromkeys(ks,“无”)
print(s2)
输出结果:
image

update(d/iterable) 使用参数中的数据更新当前字典
该方法的参数可以接收一个字典(大多数的使用方式),也可以接收一个可迭代对象,如果参数数据中的key在当前字典中存在,则使用新值更新字典中的键值对,如果参数数据中的key在当前字内中不存在,则将键值对添加到当前字典中

更新目标数据是一个字典

stu = {‘name’: ‘Tom’, ‘age’: 23, ‘gender’: ‘male’, ‘address’: ‘BeiJing’}
newStu = {“name”:“Jack”,“hobby”:“eat”}
stu.update(newStu)
print(stu)

更新目标数据是一个可迭代对象

stu = {‘name’: ‘Tom’, ‘age’: 23, ‘gender’: ‘male’, ‘address’: ‘BeiJing’}
newStu = ((“name”,“Rose”),[“hobby”,“play”])
stu.update(newStu)
print(stu)
输出结果:


字典删除操作
popitem() 用来获取并删除字典中的最后一个键值对,返回一个元组,如果字典为空,抛出错误
pop(key) 用于获取并删除字典中指定key对应的键值对。如果指定的key不存在,则抛出错误
clear() 清空字典中所有的键值对元素

集合

集合概念特性:
集合是一种数据类型,用于存储多个元素,并确保元素的唯一性
集合中的元素是无序的,不可以通过索引或切片进行访问
集合的主要特点是元素不重复,相同的元素在集合中只会出现一次
可以使用大括号 {} 或 set() 函数来定义和创建集合
集合提供了各种集合运算,如并集(两个集合中的所有元素)、交集(两个集合中共有的元素)、差集(第一个集合中存在而第二个集合中不存在的元素)等操作
集合的创建
不能使用 {} 创建一个空集合,因为此种方式创建的类型为字典
s2 = {} #定义成字典类型,而不是集合类型
集合元素具有唯一性
s = {1,1,1,2,3,4,5,6,6,6,6,6,6,6}
print(s)
集合常见的用途包括成员检测、从序列中去除重复项以及数学中的集合类计算,例如交集、并集、差集与对称差集等等

集合操作:
add(ele) 向集合中添加一个元素,如果元素则不产生任何影响
update(others)更新集合,添加来自 others 中的所有元素,others是一个可迭代对象,如果数据在集合中存在则不更新 *pop()从集合中移除并返回任意一个元素,如果集合为空,则抛出错误remove(elem)从集合中移除元素 elem。 如果 elem 不存在于集合中则抛出错误 discard(elem) 如果元素 elem 存在于集合中则将其移除,如果elem不存在,则什么也不做 *clear() 清空集合
isdisjoint(other) 如果集合中没有与 other 共有的元素则返回 True。 当且仅当两个集合的交集为空集合时,两者为不相交集合
issubset(other) 检测是否集合中的每个元素都在 other 之中
issuperset(other) 检测是否 other 中的每个元素都在集合之中
union(*other) 返回一个新集合,其中包含来自原集合以及 others 指定的所有集合中的元素,other可以指定多个集合
intersection(*others) 返回一个新集合,其中包含原集合以及 others 指定的所有集合中共有的元素

深拷贝与浅拷贝

拷贝是指使用一个已存在一个对象,生成一个新的对象,两个对象在内存中具有独立的存储空间
浅拷贝是指创建一个新的对象,只拷贝内容是原始对象的引用,而不是创建原始对象的副本数据
深拷贝是指创建一个新的对象,并递归地复制原始对象及其所有嵌套对象的内容,而不仅仅是复制它们的引用
浅拷贝不具有数据独立性,对象的 copy() 方法,copy 模块的copy() 方法,工厂方法,切片等方式得到的都是浅拷贝对象
深拷贝具有数据独立性,使用 copy 模块中的 deepcopy() 方法实现深拷贝
程序大部分实现的都是浅拷贝
浅拷贝,深拷贝特指容器类型保存的复杂结构,对于基本类型的数据,都是引用指向
sorted是深拷贝
浅拷贝 copy()
深拷贝
原始数据
originData = [[1,2],{“name”:“Tom”, “chars”:[“A”,“B”]}]

使用 copy模块中的deepcopy方法获取深拷贝对象
deepCopyData = copy.deepcopy(originData)

分支语句-if

  • 什么是分支语句
    程序中的选择语句,也称为条件语句,即按照条件选择执行不同 的代码片段

if 条件判断
if 保留字来组成选择语句
if 表达式:
语句快
表达式可以是一个单纯的布尔值或变量,也可以是比较表达式或逻辑表达式
如果表达式为真,执行语句块。如果表达式为假,跳出语句块

if … else
只能二选一的条件,Python 中提供了 if…else 语句解决类似问题

if… elif… else 多重条件

分支嵌套
在最简单的 if 语句中嵌套 if…else 语句,也能在 else 语句中嵌套,还能在 elif 语句中嵌套
if 选择语句可以有多种嵌套方式,在开发程序时,可以根据自身需要选择在合适的分支基础上进行嵌套,但一定要严格控制好不同级别代码块的缩进量

匹配语句
在 Python 中,match 是 Python 3.10 版本引入的一种模式匹配语法
提供了一种简洁而强大的方式来匹配和处理不同模式的逻辑,当成功匹配一个模式时,就执行该模式后的代码块
match 语句适用于有限的精准值的匹配,不适用于范围值的判断
语法结构:
match value:
case pattern1:
# 处理 pattern1 匹配成功的情况
case pattern2:
# 处理 pattern2 匹配成功的情况

case patternN:
# 处理 patternN 匹配成功的情况
case _:
# 处理所有其他情况的匹配(相当于默认情况)
macth 表示匹配模式开始
value表示需要匹配的目标值
case 表示提供一个匹配模式
pattern 表示被匹配的值,该值一般为一个字面量值
- 表示当所有模式都未匹配成功,则执行该模式下的代码块
组合多个匹配值
match 可以在一个匹配模式中,提供多个匹配值,使用 | 组合,在匹配时,只要成功匹配其中一个值即可

在提供匹配值时,除可以提供字面值外,还可以提供变量,用来匹配任意值,如_ ,但是在一个匹配语句中,只能出现一个独立的匹配变量

如果需要动态匹配部分数据,比如一个元组中的部分值,此时可以通过绑定变量的方式,提供一个字面值和变量的混合匹配模式,字面值用来精确匹配,变量用来模糊匹配

循环语句 -while

有些事物必须周而复始地运转才能保证其存在的意义,无法一次解决的事务,使用循环
循环两种类型:
重复一定次数的循环,称为计次循环
一直重复,直到条件不满足时才结束的循环,称为条件循环。只要条件为真,这种循环会一直持续下去,如 while 循环
循环的作用
提高代码的重复性,减少代码冗余
遍历序列(字符串,元组,列表,字典等)
循环的构成要素
初始化语句
循环条件
循环体
迭代语句

什么是 while 循环
只要循环条件为真,这种循环会一直持续下去,通常指的是 while 循环
只要条件为真,这种循环会一直持续下去,通常指的是 while 循环。

for in循环
Python并没有提供类似C语言中那种传统意义上的for循环,而是提供了一种专门处理字符串,元组,列表,字典等可迭代的序列类型数据的增强型for循环
语法:
for 迭代变量 in 对象:
循环体
for-in 循环会将可迭代对象中的元素依次取出,保存到迭代变量中。每取出一个变量,便执行一次循环体,在循环体中可以通过引用迭代变量,使用取出的数据
遍历迭代对象,
遍历字符串
遍历元组
遍历列表
遍历字典
在使用for-in遍历字典时,默认遍历的是字典的所有key
遍历键值 for method in requestMethods.keys():
通过遍历访问每个键和键值

循环跳转

在使用循环进行实现逻辑时,并不是每次都会将循环执行完毕,或者循环根本没有结束的条件,此时,在循环过程中,期望达到某个条件时,结束循环继续向后执行,此时,就可以使用循环跳转来完成此功能:

  • break 结束当前循环

  • continue 结束本次循环

break 语句可以中止当前的while 或for-in循环,无论循环还有多少次没有循环,都会无条件结束循环后,跳转到循环后的语句继续执行
break 语句出现在多层循环中时,所处在哪个循环的循环体内,就跳出哪个循环,更外层的循环不受影响

continue 语句
continue 语句的作用用来中止本次循环而提前进入下一次循环中,循环体中未执行完的代码不在执行

loop-else
不只if 语句可以使用else, 循环语句也可以使用else
当一个循环没有被break中断而正常循环结束,就会执行else后的代码块

python函数

函数返回值与参数处理

函数的主要作用是实现模块化代码,减少代码在程序中的冗余,提高代码的复用率
函数通过接收一定的数据,根据业务逻辑进行相应的处理,然后将处理结果返回给调用者
实现函数要基于高内聚,低耦合的思想
通过遵循函数的高内聚低耦合原则,可以带来以下优点
可维护性
可测试性
可复用性
灵活性

函数的返回值
return 结束函数执行,返回值给调用者
函数只能返回一个值
一个函数只能返回一个结果值,当需要返回多个值时,需要进行包装处理
组包与解包
当将多个值,同时赋给一个变量时,Python会进行自动组包操作,将所有的数字组合成一个元组,再将元组赋值给变量。 当使用一个元组为多个变量进行赋值时,Python会将元组中的元素值,依次赋值给变量,这称为解包操作

多个return语句
在一个函数中,允许有多个return语句,可以实现在不同的条件下,返回不同的值,但同一时刻,只能有一个return语句被执行

参数传递
参数是指函数在完成特定功能时,需要外部传递的数据
在程序中,函数调用时指定数据的过程,称为参数传递

  • 主调函数:主动调用其它函数执行的称为主调函数。
  • 被调函数:被动调用执行的函数称为被调函数。
  • 实际参数:在调用函数的时候,函数名称后面括号中的数据即为实际参数,简称实参,通俗讲就是实际值。
  • 形式参数:在定义函数的时候,函数名称后面括号中的变量即为形式参数,称称形参,通俗讲就是一个记号

位置参数

位置参数也称为必备参数,必须按照正确的顺序传到函数中,即调用时的数量和位置必须 和定义时是一样的。

  • 数量必须与定义时一致,在调用函数时,指定的实际参数的数量必须与形式参数的数量一致,否则将抛出 TypeError 异常,提示缺少必要的位置参数(missing x required positional argument)。
  • 位置必须与定义时一致,在调用函数时,指定的实际参数的位置必须与形式参数的位置一致,否则将抛出 TypeError 异常或者结果与预期不符的情况,例如入参的位置 1 需要一个 int 类型参数,而入参 2 位置需要一个 str 类型的参数,如果传递的位置不正确,那么 str 类型数据传递进去之后会报类型错误的异常;位置参数是会按照顺序进行参数的替换的

关键字参数
关键字参数是指使用形式参数的名字来确定输入的参数值,通过该方式指定实际参数时,不再需要与形式参数的位置完全一致,只要将参数名写正确即可,这样可以避免用户需要牢记参数位置的麻烦,使得函数的调用和参数传递更加灵活方便

变量和作用域

python的作用域一共有四种,
l:最内层,包含局部变量,一个函数的内部
E:包含了非局部(non-local)也非全局(non-global)的变量,一般在闭包中出现。
G:当前脚本的最外层,比如当前模块的全局变量
B:包含了内建的变量/关键字等,最后被搜索
根据作用域的不同,变量可分为局部变量和全局全量

匿名函数

匿名函数是指没有名字的函数,应用在需要一个函数,但是又不想费神去命名这个函数的场合。在通常情况下,这样的函数只使用一次
使用 lambda 表达式创建匿名函数

  • Lambda 函数可用于任何需要函数对象的地方。
  • 在语法上,匿名函数只能是单个表达式。
  • 在语义上,它只是常规函数定义的语法糖。
  • lambda 表达式中不能使用 if,for,while, return等语句, 但可以使用三目运算符
    使用场景:需要一个函数,但是又不想费神去命名这个函数
  • 通常在这个函数只使用一次的场景下
  • 可以指定短小的回调函数
    例如:
    func = lambda x: x ** 2 if x > 3 else x ** 3
    print(func(4))
    解析,大于3输出X平方,小于等于三输出X三次方