Skip to content

Latest commit

 

History

History
173 lines (124 loc) · 4.09 KB

247-562481-[专业选修]匿名函数_lambda.sy.md

File metadata and controls

173 lines (124 loc) · 4.09 KB
show version enable_checker
step
1.0
true

类型提示(type hint)

回忆

  • 上次了解了字典作为参数
  • 字典作为形参(args)被定义
    • 如果实参传过来是多个元素
      • 形式是关键字型
      • 用逗号隔开
      • 函数中可以用对kwargs解包
      • kwargs是一个字典
    • 这样我们就可以在调用的时候使用不定长的字典参数了
    • 这也很方便
  • 字典作为实参被调用的时候
    • 如果真的是一个字典变量
      • 前面要加上**
      • 变成**kwargs
      • 可以把字典项作为参数一个个传过去
  • 函数还有什么好玩的?

查看文档

图片描述

  • 小型匿名函数可以用lambda这个关键字来

什么是lambda函数

  • 一般的函数定义

图片描述

  • lambda函数定义

图片描述

  • 这种函数可以直接写在参数位置

图片描述

  • 这样我们就有了一个lambda 关键字定义的匿名函数
  • 如何从汇编角度理解这个?

汇编理解

  • :python3 -m dis %

图片描述

  • 还是定义了一个函数
  • 还是调用(call)了这个函数
  • 只不过这个函数没有名字
  • 而是叫做lambda
  • 如何理解lambda呢?

帮助手册

图片描述

  • 查询

图片描述

  • lambda表达式经常用来产生匿名函数
  • 用法和函数一样
  • 有什么好用的么?

列表排序

  • 这个列表是由元组组成的
  • 可以按照元组中的第0项排序
    • 第0项是数字
    • 按照数字的大小排序

图片描述

  • 也可以按照第1项
    • 第1项是字符串
    • 按照字符串中字母的ascii编码排序

图片描述

  • 默认是第几项呢?

图片描述

  • 默认第0项
  • 可以把匿名函数变成非匿名的么?

lambda的意义

图片描述

  • 可以定义成具体的函数

图片描述

  • 不过匿名函数(lambda)好写好用
  • 具体应用

洗牌理牌

  • 一副扑克
  • 54张
  • 想玩斗地主

图片描述

  • 用计算机模拟出洗牌、理牌的过程

图片描述

具体代码

from random import shuffle
def get_ordinal(l):
    return l[0]


def show():
    for group in groups:
        for card in group:
            print(card[1],end=" ")
        print()
    print()


red = "\33[30;47m"
black = "\33[31;47m"
reset = "\33[0m"
nums = ["2","3","4","5","6","7","8","9","X","J","Q","K","A"]
marks = [black + "\u2660",red + "\u2665",black + "\u2663",red + "\u2666"]
cards = []
current = 0
for num in nums:
    for mark in marks:
        cards.append((current,mark+num+reset))
        current = current + 1
cards.append((53,black+"JK"+reset))
cards.append((54,red+"JK"+reset))
shuffle(cards)
user1 = cards[0:17]
user2 = cards[17:34]
user3 = cards[34:51]
dizhu = cards[51:54]
groups = [user1,user2,user3,dizhu]
show()
for group in groups:
    group.sort(key=get_ordinal)
show()
  • 可以优化么?
  • 如何优化

总结

  • 我们这次研究了匿名函数(lambda)
    • 匿名函数也是一个函数
    • 也需要被调用(call)
    • 但是匿名函数用lambda表达式的方式写成
    • 简便易用
    • 清晰明确
  • 可以用于排序等等方面
  • 函数到这里已经很久了
  • 是时候进行总结了🤔
  • 下次再说👋