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

    递归

    1 什么是函数的递归

    函数的递归调用是函数嵌套调用的一种特殊形式,在调用一个函数的过程中又直接或者间接地调用该函数
        本身,称之为函数的递归调用
    
        递归调用必须有两个明确的阶段:
            1. 回溯: 一次次递归调用下去,说白了就一个重复的过程,但需要注意的是每一次重复问题的规模都应该有所减少,直到逼近一个最终的结果,即回溯阶段一定要有一个明确的结束条件
            2. 递推: 往回一层一层推算出结果
    2 递归的应用
    import sys
    # print(sys.getrecursionlimit())
    # sys.setrecursionlimit(2000)
    
    # def foo(n):
    #     print('from foo',n)
    #     foo(n+1)
    #
    # foo(0)
    
    
    # def bar():
    #     print('from bar')
    #     foo()
    #
    # def foo():
    #     print('from foo')
    #     bar()
    #
    # foo()
    
    # age(5)=age(4)+2
    # age(4)=age(3)+2
    # age(3)=age(2)+2
    # age(2)=age(1)+2
    # age(1)=18
    #
    # age(n)=age(n-1)+2 #n>1
    # age(n)=18         #n=1

    递归调用就是一个重复的过程,但是每一次重复问题的规模都应该有所减少,并且应该在满足某种条件的情况下结束重复,开始进入递推阶段

    def age(n):
        if n == 1:
            return 18
        return age(n-1)+2
    print(age(5))

    l=[1,[2,[3,[4,[5,[6,[7,[8,[9,[10,[11,]]]]]]]]]]] for item in l: if type(item) is not list: print(item) else: for i in item: print(i)

    三元表达式

    def max2(x,y):
      if x>y:
        return x
        else:
            return y
    
        return x if x>y else y

    三元表达式实现的效果就是条件成立的情况下返回一个值,不成立的情况下返回另外一种值

    res = 条件成立情况下返回的值 if 条件 else 条件不成立情况下返回的值

    name-input('your name').strip()

    res= 'SB' if name == 'andy' else 'NB'

    print(res)

    列表生成式与字典生成式
    # names=['alex','lqz','yyh','fm']
    # l=[]
    # for name in names:
    # res=name + '_DSB'
    # l.append(res)
    # print(l)

    # l=[name + '_DSB' for name in names]
    # print(l)

    names=['alex_sb','lqz_sb','yyh_sb','fm_sb','egon']
    # l=[]
    # for name in names:
    # if name.endswith('sb'):
    # l.append(name)
    # print(l)

    # l=[name for name in names if name.endswith('sb')]
    # print(l)

    # items=[
    # ('name','egon'),
    # ('age',18),
    # ('sex','male'),
    # ]
    # dic=dict(items)
    # print(dic)


    # 补充
    # l=['a','b','c','d']
    # for i,v in enumerate(l):
    # print(i,v)

    keys=['name','age','sex']
    vals=['egon',18,'male']
    dic={}
    for i,k in enumerate(keys):
    # print(i,k)
    dic[k]=vals[i]
    print(dic)

    dic={k:vals[i] for i,k in enumerate(keys)}
    print(dic)

    dic={k:vals[i] for i,k in enumerate(keys) if i > 0}
    print(dic)


    # print({i:i for i in range(10)})
    # print({i for i in range(10)})
    print({i for i in 'hello'})
     
    匿名函数

    1 匿名函数:就是没有名字的函数

    2 为何要用:
    用于仅仅临时使用一次的场景,没有重复使用的需求



    def sum2(x,y):
    return x+y

    # print(lambda x,y:x+y)
    # print((lambda x,y:x+y)(1,2))

    # 匿名函数的精髓就是没有名字,为其绑定名字是没有意义的
    # f=lambda x,y:x+y
    # print(f)
    # print(f(1,2))

    # 匿名函数与内置函数结合使用
    # max,min,sorted,map,filter,reduce


    salaries={
    'egon':300000,
    'alex':100000000,
    'wupeiqi':10000,
    'yuanhao':2000
    }
    # 求薪资最高的那个人名:即比较的是value,但取结果是key
    # res=max(salaries)
    # print(res)

    # 可以通过max函数的key参数来改变max函数的比较依据,运行原理:
    # max函数会“for循环”出一个值,然后将该值传给key指定的函数
    # 调用key指定的函数,将拿到的返回值当作比较依据

    # def func(name):
    # # 返回一个人的薪资
    # return salaries[name]
    #
    # res=max(salaries,key=func) #'egon'
    # print(res)

    # 求最大值
    # res=max(salaries,key=lambda name:salaries[name]) #'egon'
    # print(res)

    # 求最小值
    # res=min(salaries,key=lambda name:salaries[name]) #'egon'
    # print(res)


    # sorted排序
    # nums=[11,33,22,9,31]
    # res=sorted(nums,reverse=True)
    # print(nums)
    # print(res)
    # salaries={
    # 'egon':300000,
    # 'alex':100000000,
    # 'wupeiqi':10000,
    # 'yuanhao':2000
    # }
    # for v in salaries.values():
    # print(v)
    # res=sorted(salaries.values())
    # print(res)

    # res=sorted(salaries,key=lambda name:salaries[name],reverse=True)
    # print(res)


    # map:把一个列表按照我们自定义的映射规则映射成一个新的列表
    # names=['alex','lxx','wxx','yxx']
    # res=map(lambda name: name + "dSB", names)
    # print(list(res))

    # filter: 从一个列表中过滤出符合我们过滤规则的值
    # 运行原理:相当于for循环取出每一个人名,然后传给匿名函数,将调用匿名函数返回值为True的那个人名给留下来
    # names=['alex_sb','lxx_sb','wxx_sb','egon','yxx']

    # res=filter(lambda name:name.endswith('sb'),names)
    # print(list(res))

    # print([name for name in names if name.endswith('sb')])

    # reduce: 把多个值合并成一个结果
    from functools import reduce
    l=['a','b','c','d']

    # res=reduce(lambda x,y:x+y,l,'A')
    #'A','a' => 'Aa'
    #'Aa','b'=>'Aab'
    #'Aab','c'=>'Aabc'
    #'Aabc','d'=>'Aabcd'
    # print(res)


    # res=reduce(lambda x,y:x+y,l)
    #'a','b'=>'ab'
    # print(res)

    # res=reduce(lambda x,y:x+y,range(1,101))
    #1,2=>3
    #3,3=>6
    # print(res)

      

  • 相关阅读:
    格式与布局 float 左右悬浮边框
    格式与布局
    样式表
    c# 验证码
    邮箱登录页面
    表单与框架
    HTML 练习 做简历表
    HTML 基础
    验证码 随机数
    Linux 三剑客 -- awk sed grep
  • 原文地址:https://www.cnblogs.com/ouyang99-/p/10415002.html
Copyright © 2011-2022 走看看