美文网首页
013-函数2

013-函数2

作者: 小D修行笔记 | 来源:发表于2022-07-31 23:27 被阅读0次

    \color{red}{递归函数、lambda表达式、abs、round、map、reduce、filter}

    递归函数

    应用场景

    • 递归是一种编程思想
    • 如果要遍历一个文件夹下面所有的文件,通常会使用递归来实现

    递归的特点

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

    简单应用

    # 3以内数字累加和 3 + 2 + 1
    def sum_numbers(num):
        # 如果是1,直接返回1  ---- 出口
        if num == 1:
            return 1
        # 如果不是1,当前值 + 继续调用该函数,num值减1
        return num + sum_numbers(num - 1)
    # 调用函数
    print(sum_numbers(100))
    

    输出结果

    5050
    
    • 如果没有出口,会报错---超出最大递归深度
    • 递归调用的次数超过最大深度也会报错

    lambda表达式

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

    lambda 参数列表:表达式

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

    无参数

    # 无参数
    fn1 = lambda: 100
    print(fn1())
    

    输出结果

    100
    

    一个参数

    # 一个参数
    fn1 = lambda a: a
    print(fn1('hello world'))
    

    输出结果

    hello world
    

    缺省参数

    # 缺省参数
    fn1 = lambda a, b, c = 100: a + b + c
    print(fn1(10,20))  # 使用默认参数
    print(fn1(10, 20, 30))  # 不使用默认参数
    

    输出结果

    130
    60
    

    可变参数:*args

    # 可变参数:*args
    fn1 = lambda *args:args
    print(fn1(10, 20, 30))  # 元组
    

    输出结果

    (10, 20, 30)
    

    可变参数:**kwargs

    # 可变参数:**kwargs
    fn1 = lambda **kwargs:kwargs
    print(fn1(name='Tom', age=20))
    

    输出结果

    {'name': 'Tom', 'age': 20}
    

    lambda应用

    带判断的lambda

    # 带判断的lambda
    fn1 = lambda a, b: a if a > b else b
    print(fn1(10, 20))
    

    输出结果

    20
    

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

    # 列表数据按字典key对应的value排序
    students = [
        {'name': 'Tom', 'age': 20},
        {'name': 'Rose', 'age': 19},
        {'name': 'Jack', 'age': 22}
    ]
    students.sort(key=lambda x:x['age'])
    print(students)
    students.sort(key=lambda x:x['age'], reverse=True)
    print(students)
    

    输出结果

    [{'name': 'Rose', 'age': 19}, {'name': 'Tom', 'age': 20}, {'name': 'Jack', 'age': 22}]
    [{'name': 'Jack', 'age': 22}, {'name': 'Tom', 'age': 20}, {'name': 'Rose', 'age': 19}]
    

    高阶函数

    • 高阶函数就是把一个函数作为另外一个函数的参数传入

    内置函数abs()

    • 对数字求取绝对值计算
    # abs函数
    a = abs(-10)
    print(a)
    

    输出结果

    10
    

    内置函数round()

    • 对数字的四舍五入计算
    # round函数
    a = round(1.2)
    b = round(1.8)
    print(a)
    print(b)
    

    输出结果

    1
    2
    

    两个函数求取绝对值后再求和计算

    直接传入数据
    # 先求取绝对值,再求和
    def add(a, b):
        return abs(a) + abs(b)
    print(add(-3, 5))
    

    输出结果

    8
    
    传入函数作为参数
    # 传入函数
    def add_num(a, b, fn):
        return fn(a) + fn(b)
    print(add_num(-3, 5, abs))
    

    输出结果

    8
    
    • 函数作为参数传入,只需传入函数名即可

    内置高阶函数

    map函数

    • map(func,lst)将传入的函数变量func作用到lst变量的每个元素中,并将结果组成新的列表(python2)/迭代器(Python3)返回
    # map函数
    list1 = [1, 2, 3, 4]
    def fn(a):
        return a ** 2
    result = map(fn, list1)
    print(list(result))
    

    输出结果

    [1, 4, 9, 16]
    

    reduce函数

    -reduce(func,lst)其中func必须要有两个参数。每次func计算的结果继续和序列中的下一个元素做累积计算

    • 使用reduce函数,需要导入 functools模块
    • 使用functools.reduce来调用函数
    # reduce
    import functools
    list1 = [1, 2, 3, 4, 5]
    def fn(a, b):
        return a + b
    result = functools.reduce(fn,list1)
    print(result)
    

    输出结果

    15
    

    filter函数

    • filter(func,lst)函数用于过滤序列
    • 过滤掉不符合条件的元素,返回一个filter对象
    • 如果要转换成列表,可以使用list()来转换
    # filter
    list1 = [1, 2, 3, 4, 5, 6]
    def func(x):
        return x % 2 == 0
    result = filter(func, list1)
    print(result)
    print(list(result))
    

    输出结果

    [2, 4, 6]
    
    • 过滤条件为,当func有返回值,并且返回不会False的时候

    相关文章

      网友评论

          本文标题:013-函数2

          本文链接:https://www.haomeiwen.com/subject/yjulwrtx.html