侧边栏壁纸
  • 累计撰写 123 篇文章
  • 累计创建 27 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

递归函数和匿名函数

梁来福
2022-02-19 / 0 评论 / 0 点赞 / 0 阅读 / 3988 字
温馨提示:
本文最后更新于 2024-05-06,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

递归的应用场景

1、日常开发中,遍历一个文件夹下所有文件

2、高级算法中,如:快速排序

递归的特点

  • 函数内部自己调用自己
  • 必须有出口

递归之回顾函数返回值

返回值的位置:函数调用的位置


递归代码实现

需求

3以内数字累加和

分析

3以内数字累加和:3 + 2 + 1 = 6

6 = 3 + 2以内数字累加和

2以内数字累加和 = 2 + 1以内数字累加和

1以内数字累加和 = 1 #即为出口

代码实现

def sum_num(num):
    # 出口
    if num == 1:
        return 1
    # 当前数字 + 当前数字 - 1 的累加和
    return num + sum_num(num - 1)

result = sum_num(3)
print(result)

输出:6


递归的执行流程

image.png


递归出口问题

如果没有出口会报错,超过最大递归深度(不同计算机不同)


lambda

lambda应用场景

如果一个函数有一个返回值并且只有一句代码,可以使用lambda简化

lambda语法

lambda 参数列表:表达式

注意:

  • lambada表达式参数可有可无,函数的参数在lambda表达式中完全适用
  • lambda表达式能接收任何数据量的参数但只能返回一个表达式的值

体验lambda

函数

def fn1():
    return 100

result = fn1()
print(result)

输出:100

lambda

fn2 = lambda: 100
print(fn2)
print(fn2())

输出:

<function at 0x1039645e0>
100

注意: 直接打印lambda表达式输出的是lambda的内存地址

lambda实例

计算两个数字累加和

计算a + b

函数实现
def add(a, b):
    return a + b

result = add(1, 2)
print(result)

输出:3

lambda实现
fn1 = lambda a, b: a + b
print(fn1(2, 3))

输出:5

lambda的参数形式

无参数

fn1 = lambda: 100
print(fn1())

输出:100

一个参数

fn1 = lambda a: a
print(fn1('hello python'))

输出:python

默认参数

fn1 = lambda a, b, c=100: a + b + c
print(fn1(200, 300))

输出:600

可变参数:*args

fn1 = lambda *args: args
print(fn1(100, 200, 300, 400))

输出:(100, 200, 300, 400)

可变参数:**kwargs

fn1 = lambda **kwargs: kwargs
print(fn1(name='python', age=20, id=500))

输出:{'name': 'python', 'age': 20, 'id': 500}

lambda应用

带判断的lambda

fn1 = lambda a, b: a if a > b else b
print(fn1(100, 500))

输出:500

列表数据按字典key的值排序

按name值升序排列
people = [
    {'name': 'aa', 'age': 10},
    {'name': 'cc', 'age': 20},
    {'name': 'bb', 'age': 30},
    {'name': 'dd', 'age': 40},
    {'name': 'ee', 'age': 50}
]

people.sort(key=lambda x: x['name'])
print(people)

输出:[{'name': 'aa', 'age': 10}, {'name': 'bb', 'age': 30}, {'name': 'cc', 'age': 20}, {'name': 'dd', 'age': 40}, {'name': 'ee', 'age': 50}]

按name值降序排列
people.sort(key=lambda x: x['name'], reverse=True)
print(people)

输出:[{'name': 'ee', 'age': 50}, {'name': 'dd', 'age': 40}, {'name': 'cc', 'age': 20}, {'name': 'bb', 'age': 30}, {'name': 'aa', 'age': 10}]

按age值升序排序
people.sort(key=lambda x: x['age'], reverse=False)
print(people)

输出:[{'name': 'aa', 'age': 10}, {'name': 'cc', 'age': 20}, {'name': 'bb', 'age': 30}, {'name': 'dd', 'age': 40}, {'name': 'ee', 'age': 50}]

注意: reverse默认值为False,可以不输入

按age值降序排序
people.sort(key=lambda x: x['age'], reverse=True)
print(people)

输出:[{'name': 'ee', 'age': 50}, {'name': 'dd', 'age': 40}, {'name': 'bb', 'age': 30}, {'name': 'cc', 'age': 20}, {'name': 'aa', 'age': 10}]

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin
博主关闭了所有页面的评论