Python(六)-拆包,交换变量名,lambda

目录

拆包

交换变量值

引用

lambda函数

lambda实例

字典的lambda

推导式

列表推导式

列表推导式+if条件判断

for循环嵌套列表推导式

字典推导式

集合推导式


拆包

看一下在Python程序中的拆包:把组合形成的元组形式的数据,拆分出单个元素内容。

变量名1,变量名2,... = 结果

(1)在一个函数中,使用return返回求解两个数的和、差;

(2)使用items()方式遍历处理字典中存储的学生信息各个键与值;

python 复制代码
# 1 定义函数: 返回两个参数的 和 与 差
def get_sum_sub(a, b):
    return a+b,a-b

# 2 调用
# 2.1 方式一 手动
result = get_sum_sub(10, 2)
print(result)
print(type(result))  # <class 'tuple'>

print(result[0])
print(result[1])

# 2.2 方式二 自动
res1,res2 = get_sum_sub(12, 2)
print(res1, '---->', res2)

# 3 遍历 字典
dict1 = {"name":"女儿国国王", "age":18, "skill":"XXX"}

# 3.1 方式一
for item in dict1.items():
    key = item[0]
    val = item[1]
    print(key, '--->', val)

print("*" * 100)

# 3.2 方式二
for key,val in dict1.items():
    print(key, '--->', val)

交换变量值

使用拆包方式可以用于交换变量的值。

(1)有变量a、b,请完成变量之间值的交换;

(2)使用引入第三方变量的形式完成数值的交换;

python 复制代码
# (1)有变量a、b,请完成变量之间值的交换;
a = 10
b = 20

# (2)使用引入第三方变量的形式完成数值的交换;
# 方案二
(b, a) = (a, b)
print(f"a = {a}, b = {b}")

# 方案一
c = a
a = b
b = c
print(f"a = {a}, b = {b}")


# (3)使用拆包方式完成数值交换。
"""
有一个整数列表, 按正序排列 list1 = [100, 20, 40, 50, 30, 35]
    循环1: i in [0, -2]
        循环2: [i+1, -1]
            if 列表[i]>列表[i+1]: 交换
"""
list1 = [100, 20, 40, 50, 30, 35]

# 逆序
for i in range(0, len(list1)-1):
    for j in range(i+1, len(list1)):
        if list1[i]>list1[j]:
            list1[i], list1[j] = list1[j], list1[i] # 交换位置
print(list1)


# 正序
for i in range(0, len(list1)-1):
    for j in range(i+1, len(list1)):
        if list1[i]<list1[j]:
            list1[i], list1[j] = list1[j], list1[i] # 交换位置
print(list1)

引用

注意:因为列表和字典是可变类型,所以会开辟新空间,所以地址不相同

python 复制代码
# 目标1: 引用
# 1.1 基本类型引用
a = 5;
b = 5;
print(id(a))
print(id(b))
print("-" * 50)

# 字符串
c = "abc"
d = "abc"
print(id(c))
print(id(d))
print("-" * 50)
# 1.2 复杂类型引用
# 1.2.1 列表(可变)
list1 = [1,3,5]
list2 = [1,3,5]
print(id(list1)) # 1979679672512
print(id(list2)) # 1979678989952
print("-" * 50)

# 1.2.2 元组(不可变)
t1 = (1,3,5)
t2 = (1,3,5)
print(id(t1))
print(id(t2))
print("-" * 50)

# 1.2.3 字典(可变)
dict1 = {"a":1, "b":2, "c":3, "d":4}
dict2 = {"a":1, "b":2, "c":3, "d":4}
print(id(dict1)) # 1565550724096
print(id(dict2)) # 1565550724160
print("-" * 50)

# 3 对比内容
# 3.1 基本类型
a = 5;
b = 5;

print(a == b)   # 内容: True
print(a is b)   # 地址: True

str1 = "aaa"
str2 = "aaa"

print(a == b)   # 内容: True
print(a is b)   # 地址: True
print("-" * 50)

# 3.2 复杂类型
# 3.2.1 列表(可变)
list1 = [1,3,5]
list2 = [1,3,5]
print(list1 == list2)  # 内容: True
print(list1 is list2)  # 地址: False
print("-" * 50)

# 3.2.2 元组(不可变)
t1 = (1,3,5)
t2 = (1,3,5)

print(t1 == t2)  # 内容: True
print(t1 is t2)  # 地址: True
print("-" * 50)

# 1.2.3 字典(可变)
dict1 = {"a":1, "b":2, "c":3, "d":4}
dict2 = {"a":1, "b":2, "c":3, "d":4}

print(dict1 == dict2)  # 内容: True
print(dict1 is dict2)  # 地址: False
print("-" * 50)

lambda函数

定义匿名函数需要使用lambda关键字,可以创建小型匿名函数。

匿名函数表示没有名字的函数,这种函数得名于省略了用def关键字声明函数的标准步骤

定义匿名函数语法:

lambda 参数列表 : 表达式

调用匿名函数语法:

函数名 = lambda 参数列表 : 表达式

函数名([参数列表])

(1)求解两个数之和;

(2)使用def定义函数,完成求和操作;

(3)使用匿名函数简化函数求和操作。

python 复制代码
# 目标1: 获取两个数的和
# 方式一
def get_sum(a, b):
    return a + b

print(get_sum(2, 5))

# 方式二:lambda简化
get_sum_2 = lambda a, b : a + b
print(get_sum_2(6, 5))



# 目标2: 明确有两个参数, 由用户来确定计算的规则
def get_result(a, b, fn):
    return fn(a, b)

result1 = get_result(10, 5, lambda a, b : a * b)
print(result1)

result2 = get_result(10, 5, lambda a, b : a / b)
print(result2)

result3 = get_result(10, 5, lambda a, b : a + b)
print(result3)

result4 = get_result(10, 5, lambda a, b : a - b)
print(result4)

lambda实例

python 复制代码
# 1 无参数
# 1.1 不用lambda
def func1():
    return 21

print(func1) # 地址
print(func1()) # 内容

# 1.2 用lambda
func1_2 = lambda : 66
print(func1_2) # 地址
print(func1_2()) # 内容

# 2 带参数
# 2.1 不用lambda
def func2(a, b):
    return a * b

print(func2(10, 20))

# 2.2 用lambda
func2_2 = lambda a, b : a * b
print(func2_2(3, 60))

# 3 带默认参数的lambda表达式
# 3.1 不用lambda
def func3(a, b, c=100):
    return a+b+c

print(func3(1, 2))
print(func3(1, 2, 3))

# 3.2 用lambda
func3_2 = lambda a, b, c=100: a+b+c
print(func3_2(3, 2))
print(func3_2(3, 2, 20))

# 4 不定长参数:可变参数*args
# # 4.1 不用lambda
def func4(*args):
    return args


print(func4(10, 20, 30, 40))
print(type(func4(10, 20, 30, 40)))

# 4.2 用lambda
func4_2 = lambda *args : args
print(func4_2(66, 88, 99, 21))
print(type(func4_2(10, 20, 30, 40)))

# 5 不定长参数:可变参数**kwargs
# 5.1 不用lambda
def func5(**kwargs):
    return kwargs

print(func5(name="悟空", skill="七十二变", sex="男"))

# 5.2 用lambda
func5_2 = lambda **kwargs : kwargs
print(func5_2(name="八戒", skill="三十六变", sex="男"))

# 6 带if判断(三目运算符)的lambda表达式
# 6.1 不用lambda
def get_max(a, b):
    if a > b:
        return a
    else:
        return b


print(get_max(2, 5))
print(get_max(20, 5))
print(get_max(20, 50))

# 6.2 用lambda
get_max_2 = lambda a, b : a if a > b else b
print(get_max_2(120, 50))
print(get_max_2(120, 500))

字典的lambda

python 复制代码
student_list = [
    {"name":"悟空", "skill" : "火眼金睛", "wulizhi":90},
    {"name":"二郎神", "skill" : "放狗", "wulizhi":120},
    {"name":"哪吒", "skill" : "三头六臂", "wulizhi":80}
]

student_list.sort(key=lambda x: x["name"]) # 根据名字排序
print(student_list)

student_list.sort(key=lambda x: x["wulizhi"]) # 根据武力值排序
print(student_list)

student_list.sort(key=lambda x: x["wulizhi"], reverse=True)  # 根据武力值逆序
print(student_list)

推导式

共有三种推导:列表推导式,集合推导式,字典推导式

列表推导式

变量名 = [表达式 for 变量 in 列表]

变量名 = [表达式 for 变量 in 列表 if 条件]

变量名 = [表达式 for 变量 in 列表 for 变量 in 列表]

创建一个0-9的列表

python 复制代码
# 目标: 获取 0-9的列表
# 1 while
# 初始化计数器
i = 0
list1 = []
# 编写循环条件
while i <= 9:
    list1.append(i)
 	# 更新计数器
    i += 1
print(list1)

# 2 for
list1 = []
# 编写for循环
for i in range(0, 10):
    list1.append(i)
print(list1)

# 3 列表表达式
list3 = [i for i in range(0, 10)]
print(list3)
列表推导式+if条件判断

变量 = [表达式 for 临时变量 in 序列 if 条件判断]

等价于

for 临时变量 in 序列:

if 条件判断

生成0-9之间的偶数序列

python 复制代码
list3 = [i for i in range(10) if i % 2 == 0]
print(list3)
for循环嵌套列表推导式

for 临时变量 in range(n):

for 临时变量 in range(n):

等价于

变量 = [表达式 for 临时变量 in 序列 for 临时变量 in 序列]

创建列表 => [(1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]

python 复制代码
# 不用 推导式
tuple_list = []
for i in range(1,3):
    for j in range(0,3):
        tuple_list.append((i, j))

print(tuple_list)

# 用 推导式
tuple_list_2 = [(i, j) for i in range(1,3) for j in range(0,3)]
print(tuple_list_2)

字典推导式

变量 = {key:value for key,value in 序列}

例1:创建一个字典:字典key是1-5数字,value是这个数字的2次方。

python 复制代码
dict1 = {i:i**2 for i in range(1,6)}
print(dict1)

例2:把两个列表合并为一个字典

python 复制代码
list1 = ['name', 'age', 'gender']
list2 = ['Tom', 20, 'male']
# 结果:person = {'name':'Tom', 'age':20, 'gender':'male'}

person = {list1[i]:list2[i] for i in range(len(list1))}
print(person)

例3:提取字典中目标数据

python 复制代码
counts = {'MBP': 268, 'HP': 125, 'DELL': 201, 'Lenovo': 199, 'ACER': 99}

# 需求:提取上述电脑数量大于等于200的字典数据
counts = {key:value for key, value in counts.items() if value >= 200}
print(counts)

集合推导式

集合推导式跟列表推导式非常相似,唯一区别在于用 { } 代替 [ ]。

集合最大的特点就是去重

创建一个集合,数据为下方列表的2次方。

python 复制代码
list1 = [1, 1, 2]
set1 = {i**2 for i in list1}
print(set1)
相关推荐
大麦大麦24 分钟前
深入剖析 Sass:从基础到进阶的 CSS 预处理器应用指南
开发语言·前端·css·面试·rust·uni-app·sass
hhw1991121 小时前
c#面试题整理6
java·开发语言·c#
Icomi_1 小时前
【神经网络】0.深度学习基础:解锁深度学习,重塑未来的智能新引擎
c语言·c++·人工智能·python·深度学习·神经网络
蠟筆小新工程師1 小时前
Deepseek可以通过多种方式帮助CAD加速工作
开发语言·python·seepdeek
NoBarLing1 小时前
python将目录下的所欲md文件转化为html和pdf
python·pdf·html
岱宗夫up2 小时前
【Python】Django 中的算法应用与实现
数据库·python·opencv·django·sqlite
天道有情战天下2 小时前
python flask
开发语言·python·flask
帅弟1503 小时前
Day4 C语言与画面显示练习
c语言·开发语言
qhs15733 小时前
Kotlin字符串操作在Android开发中的应用示例
android·开发语言·kotlin
秀儿还能再秀4 小时前
淘宝母婴购物数据可视化分析(基于脱敏公开数据集)
python·数据分析·学习笔记·数据可视化