zoukankan      html  css  js  c++  java
  • Python 函数递归-三元表达式-列表生成式-字典生成式-匿名函数-内置函数

    上节课复习:
    1. 无参装饰器
    1 def 装饰器名字(func):
    2     def wrapper(*args,**kwargs):
    3         res = func(*args,**kwargs)
    4         return res
    5     return wrapper
    6 
    7 @装饰器名字  #被装饰的函数名字=装饰器名字(被装饰的函数的内存地址)
    8  def 被装饰的函数名字():
    9     pass

    2, 有参装饰器
    def 装饰器名字(参数1,参数2,...):
        def outter(func):
            def wrapper(*args,**kwargs):
                res = func(*args,**kwargs)
                return res
            return wrapper
        return outter
    
    @装饰器名字(值1,值2,....)  #@outter
    def 被装饰的函数名字():
        pass

    3.叠加多个装饰器
    1 @deco1
    2 @deco2
    3 @deco3
    4 def index():
    5     pass
      解释语法的顺序:自下而上,deco->deco2->deco1
      调用index()时才开始触发装饰器内部闭包函数的执行,闭包函数执行顺序是:自上而下,
      deco1.wrapper1->deco2.wrapper2->deco3.wrapper3




    今日内容:

    1.函数递归(*****)
    1.什么是函数递归
    函数的递归调用是函数嵌套调用的一种特殊形式,
    在调用一个函数的过程中又直接或者间接地调用该函数本身,称之为函数的递归调用
    递归调用必须有两个明确的阶段:
    1.回溯: 一次次递归调用下去,说白了就一个重复的过程,
    但需要注意的是每一次递归调用问题的规模都应该有所减少,
    直到逼近一个最终的结果,即回溯阶段一定要有一个明确的结束条件

    2.递归: 往回一层一层推算出结果
    递归调用就是一个重复的过程,但是每一次重复问题的规模都应该有所减少,并且应该在满足某种条件的情况下结束重复,开始进入递增


    2.三元表达式,列表生成式,字典生成式
    1.三元表达式:
    三元表达式实现的效果就是: 条件成立的情况下返回一个值,不成立的情况下返回另一种值
    # 条件成立情况下返回的值 if条件 else 条件不成立情况下返回的值
    1 def max2(x,y):
    2     #原写法
    3     if x > y:
    4         return x
    5     else:
    6         return y
    7     #新写法
    8     return x if x > y else y 
    9     #三元表达式一行代码把上面代码全省略了   

    2.列表生成式:
    1 names = ['alex', 'lqz', 'yyh', 'fm']
    2  l = [name + '_DSB' for name in names]
    
    
        3.字典生成式:
    补充内置方法: enumerate(),取索引
     1 keys = ['name', 'age', 'sex']
     2 vals = ['egon', 18, 'male']
     3 
     4 #原写法
     5 dic = {}
     6 for i,k in enumerate(keys):
     7     dic[k] = vals[i]
     8     print(dic)
     9 
    10 #新写法
    11 dic = {k:vals[i] for i,k in enumerate(keys)}
    12 dic = {k:vals[i] for i,k in enumerate(keys) if i > 0}
    
    
    3.匿名函数与内置函数
    1.匿名函数: 就是没有名字的函数
    1.为何要用匿名函数:
    用于仅仅临时使用一次的场景,没有重复使用的需求
    1 print(lambda x,y:x+y)(1,2))
    2 print((lambda x,y: x if x > y else y)(8,2))
            2.匿名函数和内置函数配合使用
     1 salaries = {
     2     'egon':300000,
     3     'alex':100000000,
     4     'wupeiqi':10000,
     5     'yuanhao':2000
     6 }
     7 #求薪资最高的那个人名:即比较的是value,但取结果是key
     8 res = max(salaries)
     9 print(res)
    10 #可以通过max函数的key参数来改变max函数的比较依据,运行原理:
    11 #max函数会'for循环'出一个值,然后将该值传给key指定的函数
    12 #调用key指定的函数,将拿到的返回值当作比较依据
    13 
    14 max(): #比较的是最大值
    15 max(salaries,key=lambda name:salaries[name])
    16 
    17 min(): #比较的是最小值
    18 min(salaries,key=lambda name:salaries[name])
    19 
    20 sorted(): #排序
    21 nums = [11, 33, 22, 9, 31]
    22 res = sorted(nums,reversed(True))
    23 print(res)
    24 
    25 map(): #把一个列表按照我们自定义的映射规则映射成一个新的列表
    26 map(lambda name:name+'DSB',names)
    27 
    28 filter(): #从一个列表中过滤出符合我们过滤规则的值
    29            #相当于for循环取出每一个人名,然后传给匿名函数,将调用匿名函数返回值为True的那个人名给留下来
    30 filter(lambda name:name.endswith('sb'),names)
    31 
    32 reduce: #把多个值合并成一个结果
    33 from functools import reduce
    34 1 = [a, b, c, d]
    35 reduce(lambda x,y:x+y,l)
    36 reduce(lambda x,y:x+y,range(1,101))
  • 相关阅读:
    程序猿编程,软件设计都干什么?
    工作流——来龙去脉
    开发编码流程
    我的spring-boot开发环境
    JSR 303
    项目中java异常处理
    学习交流,一些数据结构和算法实现!
    C运算符
    js锚点
    玻璃工艺学笔记
  • 原文地址:https://www.cnblogs.com/earon/p/9409212.html
Copyright © 2011-2022 走看看