zoukankan      html  css  js  c++  java
  • 学习python的day10之递归与内置函数

    一、递归

    递归的特点:

    函数内部自己调用自己

    必须出口

    需求:求3以内的累加和

    def sum(a):
        if a == 1:
            return 1
        return a+sum(a-1)
    result = sum(3)
    print(result)
    '''
    输出:
    6
    '''

    执行流程

    lambda表达式

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

    语法:lambda 参数列表:表达式

    def fn1():
        return 100
    result = fn1()
    print(result)
    print('*'*10)
    fn2 = lambda :100
    print(fn2)
    print(fn2())
    '''
    输出:
    100
    **********
    <function <lambda> at 0x0000028989A989D0>
    100
    '''

    如果fn2不加括号,输出的是内存地址

    注意:

    lambda表达式的参数可有可无,函数的参数在lambda表达式中完全适用

    lambda表达式能接收任何数量的参数但只能返回一个表达式 的值

    lambda的参数形式

    无参数

    print((lambda :100)())

    一个参数

    print((lambda a:a)('hi'))

    默认参数

    print((lambda a, b, c=100:a+b+c)(10,20))

    可变参数:**kwargs

    print((lambda **kwargs:kwargs)(name='z',age=2))

    lambda的应用

    带判断的lambda

    print((lambda a,b:a if a>b else b)(100,120))
    '''
    输出:
    120
    '''

    列表数据按字典key值排序

    list1 = [{'name':'A','age':20}, {'name':'B','age':23}, {'name':'C','age':18}]
    list1.sort(key=lambda s:s['age'],reverse=True)
    print(list1)
    '''
    输出:
    [{'name': 'B', 'age': 23}, {'name': 'A', 'age': 20}, {'name': 'C', 'age': 18}]
    '''

    二、内置函数

    高阶函数

    把函数作为参数传入,这样的函数成为高阶函数,高阶函数是函数式编程的体现。函数式编程指的就是这种高度抽象的编程范式。

    体验高阶函数

    在python中,abs()函数可以完成对数字的绝对值计算

    round()函数可以完成对数字的四舍五入的计算

    把函数作为参数传入的应用

    def sum(a, b, f):
        return f(a)+f(b)
    print(sum(1,-3,abs))
    '''
    输出:
    4
    
    '''

    函数式编程大量使用函数,减少了代码的重复,因此程序比较短,开发速度较快

    内置高阶函数

    map()

    map(func,lst),将传入的函数变量func作用到lst变量的每个元素中,并将结果组成新的列表(python2)/迭代器(python3)返回

    list1 = [1, 2, 3, 4, 5]
    def fun(x):
        return x**2
    result = map(fun, list1)
    print(result)
    print(list(result))
    print(list1)
    
    '''
    输出:
    <map object at 0x000001334F847F40>
    [1, 4, 9, 16, 25]
    [1, 2, 3, 4, 5]
    '''

    reduce()

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

    注意:reduce()参入的参数func必须接收两个参数。

    import functools
    
    list1 = [1, 2, 3, 4, 5]
    def fun(a,b):
        return a + b
    result = functools.reduce(fun,list1)
    print(result)
    
    '''
    输出:
    15
    '''

    filter()

    filter(func,lst)函数用于过滤序列,过滤掉不符合条件的元素,返回一个filter对象。如果要转换成列表,可以使用list()转换。

    list1 = [1, 2, 3, 4, 5]
    def fun(a):
        return a % 2 == 0
    result = filter(fun,list1)
    print(list(result))
    '''
    输出:
    [2, 4]
    '''
  • 相关阅读:
    NOIP201208同余方程
    NOIP模拟赛 最佳组合
    NOIP模拟赛 拓展
    CF1253E Antenna Coverage(DP)
    LOJ6033「雅礼集训 2017 Day2」棋盘游戏 (博弈论,二分图,匈牙利算法)
    CF582E Boolean Function(DP,状态压缩,FMT)
    CF750G New Year and Binary Tree Paths(DP)
    Codeforces Round 596 题解
    AGC008E Next or Nextnext(组合计数,神奇思路)
    ARC082E ConvexScore(神奇思路)
  • 原文地址:https://www.cnblogs.com/scheduled/p/13839639.html
Copyright © 2011-2022 走看看