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

打印 上一主题 下一主题

主题 836|帖子 836|积分 2508

目次
拆包
互换变量值
引用
lambda函数
lambda实例
字典的lambda
推导式
列表推导式
列表推导式+if条件判断
for循环嵌套列表推导式
字典推导式
聚集推导式

拆包

看一下在Python步伐中的拆包:把组合形成的元组形式的数据,拆分出单个元素内容。
   变量名1,变量名2,... = 结果
   例
(1)在一个函数中,使用return返回求解两个数的和、差;
(2)使用items()方式遍历处置惩罚字典中存储的学生信息各个键与值;
  1. # 1 定义函数: 返回两个参数的 和 与 差
  2. def get_sum_sub(a, b):
  3.     return a+b,a-b
  4. # 2 调用
  5. # 2.1 方式一 手动
  6. result = get_sum_sub(10, 2)
  7. print(result)
  8. print(type(result))  # <class 'tuple'>
  9. print(result[0])
  10. print(result[1])
  11. # 2.2 方式二 自动
  12. res1,res2 = get_sum_sub(12, 2)
  13. print(res1, '---->', res2)
  14. # 3 遍历 字典
  15. dict1 = {"name":"女儿国国王", "age":18, "skill":"XXX"}
  16. # 3.1 方式一
  17. for item in dict1.items():
  18.     key = item[0]
  19.     val = item[1]
  20.     print(key, '--->', val)
  21. print("*" * 100)
  22. # 3.2 方式二
  23. for key,val in dict1.items():
  24.     print(key, '--->', val)
复制代码
互换变量值

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


(1)有变量a、b,请完成变量之间值的互换;
(2)使用引入第三方变量的形式完成数值的互换;
  1. # (1)有变量a、b,请完成变量之间值的交换;
  2. a = 10
  3. b = 20
  4. # (2)使用引入第三方变量的形式完成数值的交换;
  5. # 方案二
  6. (b, a) = (a, b)
  7. print(f"a = {a}, b = {b}")
  8. # 方案一
  9. c = a
  10. a = b
  11. b = c
  12. print(f"a = {a}, b = {b}")
  13. # (3)使用拆包方式完成数值交换。
  14. """
  15. 有一个整数列表, 按正序排列 list1 = [100, 20, 40, 50, 30, 35]
  16.     循环1: i in [0, -2]
  17.         循环2: [i+1, -1]
  18.             if 列表[i]>列表[i+1]: 交换
  19. """
  20. list1 = [100, 20, 40, 50, 30, 35]
  21. # 逆序
  22. for i in range(0, len(list1)-1):
  23.     for j in range(i+1, len(list1)):
  24.         if list1[i]>list1[j]:
  25.             list1[i], list1[j] = list1[j], list1[i] # 交换位置
  26. print(list1)
  27. # 正序
  28. for i in range(0, len(list1)-1):
  29.     for j in range(i+1, len(list1)):
  30.         if list1[i]<list1[j]:
  31.             list1[i], list1[j] = list1[j], list1[i] # 交换位置
  32. print(list1)
复制代码
引用

注意:因为列表和字典是可变范例,以是会开发新空间,以是地点不相同

  1. # 目标1: 引用
  2. # 1.1 基本类型引用
  3. a = 5;
  4. b = 5;
  5. print(id(a))
  6. print(id(b))
  7. print("-" * 50)
  8. # 字符串
  9. c = "abc"
  10. d = "abc"
  11. print(id(c))
  12. print(id(d))
  13. print("-" * 50)
  14. # 1.2 复杂类型引用
  15. # 1.2.1 列表(可变)
  16. list1 = [1,3,5]
  17. list2 = [1,3,5]
  18. print(id(list1)) # 1979679672512
  19. print(id(list2)) # 1979678989952
  20. print("-" * 50)
  21. # 1.2.2 元组(不可变)
  22. t1 = (1,3,5)
  23. t2 = (1,3,5)
  24. print(id(t1))
  25. print(id(t2))
  26. print("-" * 50)
  27. # 1.2.3 字典(可变)
  28. dict1 = {"a":1, "b":2, "c":3, "d":4}
  29. dict2 = {"a":1, "b":2, "c":3, "d":4}
  30. print(id(dict1)) # 1565550724096
  31. print(id(dict2)) # 1565550724160
  32. print("-" * 50)
  33. # 3 对比内容
  34. # 3.1 基本类型
  35. a = 5;
  36. b = 5;
  37. print(a == b)   # 内容: True
  38. print(a is b)   # 地址: True
  39. str1 = "aaa"
  40. str2 = "aaa"
  41. print(a == b)   # 内容: True
  42. print(a is b)   # 地址: True
  43. print("-" * 50)
  44. # 3.2 复杂类型
  45. # 3.2.1 列表(可变)
  46. list1 = [1,3,5]
  47. list2 = [1,3,5]
  48. print(list1 == list2)  # 内容: True
  49. print(list1 is list2)  # 地址: False
  50. print("-" * 50)
  51. # 3.2.2 元组(不可变)
  52. t1 = (1,3,5)
  53. t2 = (1,3,5)
  54. print(t1 == t2)  # 内容: True
  55. print(t1 is t2)  # 地址: True
  56. print("-" * 50)
  57. # 1.2.3 字典(可变)
  58. dict1 = {"a":1, "b":2, "c":3, "d":4}
  59. dict2 = {"a":1, "b":2, "c":3, "d":4}
  60. print(dict1 == dict2)  # 内容: True
  61. print(dict1 is dict2)  # 地址: False
  62. print("-" * 50)
复制代码
lambda函数

定义匿名函数必要使用lambda关键字,可以创建小型匿名函数。
匿名函数表现没有名字的函数,这种函数得名于省略了用def关键字声明函数的标准步骤

   # 定义匿名函数语法:
  lambda 参数列表 : 表达式
  # 调用匿名函数语法:
  函数名 = lambda 参数列表 : 表达式
函数名([参数列表])
  例
(1)求解两个数之和;
(2)使用def定义函数,完成求和操纵;
(3)使用匿名函数简化函数求和操纵。
  1. # 目标1: 获取两个数的和
  2. # 方式一
  3. def get_sum(a, b):
  4.     return a + b
  5. print(get_sum(2, 5))
  6. # 方式二:lambda简化
  7. get_sum_2 = lambda a, b : a + b
  8. print(get_sum_2(6, 5))
  9. # 目标2: 明确有两个参数, 由用户来确定计算的规则
  10. def get_result(a, b, fn):
  11.     return fn(a, b)
  12. result1 = get_result(10, 5, lambda a, b : a * b)
  13. print(result1)
  14. result2 = get_result(10, 5, lambda a, b : a / b)
  15. print(result2)
  16. result3 = get_result(10, 5, lambda a, b : a + b)
  17. print(result3)
  18. result4 = get_result(10, 5, lambda a, b : a - b)
  19. print(result4)
复制代码

lambda实例

  1. # 1 无参数
  2. # 1.1 不用lambda
  3. def func1():
  4.     return 21
  5. print(func1) # 地址
  6. print(func1()) # 内容
  7. # 1.2 用lambda
  8. func1_2 = lambda : 66
  9. print(func1_2) # 地址
  10. print(func1_2()) # 内容
  11. # 2 带参数
  12. # 2.1 不用lambda
  13. def func2(a, b):
  14.     return a * b
  15. print(func2(10, 20))
  16. # 2.2 用lambda
  17. func2_2 = lambda a, b : a * b
  18. print(func2_2(3, 60))
  19. # 3 带默认参数的lambda表达式
  20. # 3.1 不用lambda
  21. def func3(a, b, c=100):
  22.     return a+b+c
  23. print(func3(1, 2))
  24. print(func3(1, 2, 3))
  25. # 3.2 用lambda
  26. func3_2 = lambda a, b, c=100: a+b+c
  27. print(func3_2(3, 2))
  28. print(func3_2(3, 2, 20))
  29. # 4 不定长参数:可变参数*args
  30. # # 4.1 不用lambda
  31. def func4(*args):
  32.     return args
  33. print(func4(10, 20, 30, 40))
  34. print(type(func4(10, 20, 30, 40)))
  35. # 4.2 用lambda
  36. func4_2 = lambda *args : args
  37. print(func4_2(66, 88, 99, 21))
  38. print(type(func4_2(10, 20, 30, 40)))
  39. # 5 不定长参数:可变参数**kwargs
  40. # 5.1 不用lambda
  41. def func5(**kwargs):
  42.     return kwargs
  43. print(func5(name="悟空", skill="七十二变", sex="男"))
  44. # 5.2 用lambda
  45. func5_2 = lambda **kwargs : kwargs
  46. print(func5_2(name="八戒", skill="三十六变", sex="男"))
  47. # 6 带if判断(三目运算符)的lambda表达式
  48. # 6.1 不用lambda
  49. def get_max(a, b):
  50.     if a > b:
  51.         return a
  52.     else:
  53.         return b
  54. print(get_max(2, 5))
  55. print(get_max(20, 5))
  56. print(get_max(20, 50))
  57. # 6.2 用lambda
  58. get_max_2 = lambda a, b : a if a > b else b
  59. print(get_max_2(120, 50))
  60. print(get_max_2(120, 500))
复制代码

字典的lambda

  1. student_list = [
  2.     {"name":"悟空", "skill" : "火眼金睛", "wulizhi":90},
  3.     {"name":"二郎神", "skill" : "放狗", "wulizhi":120},
  4.     {"name":"哪吒", "skill" : "三头六臂", "wulizhi":80}
  5. ]
  6. student_list.sort(key=lambda x: x["name"]) # 根据名字排序
  7. print(student_list)
  8. student_list.sort(key=lambda x: x["wulizhi"]) # 根据武力值排序
  9. print(student_list)
  10. student_list.sort(key=lambda x: x["wulizhi"], reverse=True)  # 根据武力值逆序
  11. print(student_list)
复制代码

推导式

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

   变量名 = [表达式 for 变量 in 列表]
变量名 = [表达式 for 变量 in 列表 if 条件]
变量名 = [表达式 for 变量 in 列表 for 变量 in 列表]
  创建一个0-9的列表
  1. # 目标: 获取 0-9的列表
  2. # 1 while
  3. # 初始化计数器
  4. i = 0
  5. list1 = []
  6. # 编写循环条件
  7. while i <= 9:
  8.     list1.append(i)
  9.         # 更新计数器
  10.     i += 1
  11. print(list1)
  12. # 2 for
  13. list1 = []
  14. # 编写for循环
  15. for i in range(0, 10):
  16.     list1.append(i)
  17. print(list1)
  18. # 3 列表表达式
  19. list3 = [i for i in range(0, 10)]
  20. print(list3)
复制代码

列表推导式+if条件判断

   变量 = [表达式 for 暂时变量 in 序列 if 条件判断]
  
  等价于
  
  for 暂时变量 in 序列:
    if 条件判断
  生成0-9之间的偶数序列
  1. list3 = [i for i in range(10) if i % 2 == 0]
  2. 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)]
  1. # 不用 推导式
  2. tuple_list = []
  3. for i in range(1,3):
  4.     for j in range(0,3):
  5.         tuple_list.append((i, j))
  6. print(tuple_list)
  7. # 用 推导式
  8. tuple_list_2 = [(i, j) for i in range(1,3) for j in range(0,3)]
  9. print(tuple_list_2)
复制代码

字典推导式

   变量 = {key:value for key,value in 序列}
  例1:创建一个字典:字典key是1-5数字,value是这个数字的2次方。
  1. dict1 = {i:i**2 for i in range(1,6)}
  2. print(dict1)
复制代码

例2:把两个列表合并为一个字典
  1. list1 = ['name', 'age', 'gender']
  2. list2 = ['Tom', 20, 'male']
  3. # 结果:person = {'name':'Tom', 'age':20, 'gender':'male'}
  4. person = {list1[i]:list2[i] for i in range(len(list1))}
  5. print(person)
复制代码

例3:提取字典中目标数据
  1. counts = {'MBP': 268, 'HP': 125, 'DELL': 201, 'Lenovo': 199, 'ACER': 99}
  2. # 需求:提取上述电脑数量大于等于200的字典数据
  3. counts = {key:value for key, value in counts.items() if value >= 200}
  4. print(counts)
复制代码

聚集推导式

聚集推导式跟列表推导式非常相似,唯一区别在于用 { } 代替 [ ]。
聚集最大的特点就是去重
创建一个聚集,数据为下方列表的2次方。
  1. list1 = [1, 1, 2]
  2. set1 = {i**2 for i in list1}
  3. print(set1)
复制代码





免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

老婆出轨

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表