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))
  • 相关阅读:
    sp2010 升级sp2013 用户无法打开网站
    powerviot install in sharepoint 2013
    can not connect cube in performancce dashboard
    westrac server security configure user info
    添加报表服务在多服务器场
    sharepoint 2013 office web app 2013 文档在线浏览 IE11 浏览器不兼容解决方法
    delete job definition
    目前付款申请单内网打开慢的问题
    item style edit in sharepoint 2013
    Could not load file or assembly '$SharePoint.Project.AssemblyFullName$'
  • 原文地址:https://www.cnblogs.com/earon/p/9409212.html
Copyright © 2011-2022 走看看