• day13 函数三元表达式,递归


    三元表达式,仅应用于::

    1、条件成立返回一个值

    2、条件不成立返回一个值

    def max2(x,y):
        if x > y:
            return x
        else:
            return y
    res=max(10,11)
    print(res)
    

    进化

    x=1
    y=2
    res=x if x > y else y
    

    进化

    def max2(x,y):
    x if x > y else y
    print(max2(10,11))
    
    二、函数递归

    #函数递归:函数的递归调用,即在函数调用的过程中,又直接或间接的调用了函数本身

    (了解)python里递归最多1000次,可以sys.setrecursionlimit(次数)设置,但无意义
    #直接调用
    def foo():
      print('foo')
      foo()
      
    foo()
    #间接调用
    def bar():
      print('bar')
      foo()
     
    def foo():
      print('foo')
      bar()
      
    foo()
    

    #递归分两个阶段

    1、回溯

    注意:一定要在满足某种条件结束回溯,否者无限递归

    2、递推

     

    总结

    1、递归一定要有一个明确的结束条件

    2、没进入下一次递归,问题的规模应该减少

    3、了解:在python中没有尾递归优化

    age(3)=age(2)+2
    age(2)=age(1)+2
    age(1)=18
    
    age(n)=age(n-1)+2 #n>1
    age(n)=18
    
    def age(n):
    if n==1:
    return 18
    return age(n-1)+2
    
    age(5)
    

    #python 推崇的是简洁优美

    循环解决的了为什么还要递归

    while:满足条件循环一次,需要知道多少次

    #10.41

    匿名函数

    def foo(x,n):
      return x ** n
    #可以转换成
    f=lambda x,n:x ** n
    print(f(2,3))
    print(f(2,4))
    

    强调:

    1、匿名的目的就是要没有名字,给匿名函数起名是没有意义的

    2、匿名函数参数规则、作用域与有名函数是一样的

    3、匿名函数的函数体通常是一个表达式,该表达式必须要有一个返回值

    匿名函数自带return

    lambda x,n:return x+n 相等 lambda x,n:x+n

    f(1,2)

    lambda 匿名行数的应用

    #max,min,sorted,map,filter,reduce 相当于for循环,传入的值需是可迭代的

    print(max(字典,key=自定义函数))

    print(max(字典,key=lambda x:salaries[x]))

    原理

    for item in salaries:

    item #告诉max,比较的依据,salaries[k]

    nums=[1,11,9]

    nums=sorted(nums)

    print(nums)

    salaries={'k':v}

    sorted默认按照字典的键排序

    salaries=salaries(nums,key=lambda x:salaries[x],reverse=True)

    大概讲了3遍,后面走神没听(11:18)

    #lambda与map,reduce,filter
    nums=[1,2,3,4,5]
    res=map(lambda x:x**2,nums)
    

    #map

    names=['alex','wupeiqi','yuanhao']
    res=map(lambda x:x+'_sb',names)
    print(list(res))
    
    names=['alex','wupeiqi','yuanhao']
    res=map(lambda x:x+'_NB' if x=='egon' else x + '_sb',names)
    print(list(res))
    
    from functools import reduce
    reduce(lambda x,y: x+y,range(1,101),0)
    print(res)
    

    #reduce(了解)

    from functools import reduce
    l=['my','name','is ','alex','alex','is','sb']
    res=reduce(lambda x,y:x+''+y+'',l)
    print(res)
    

    #filter

    names=['alex_sb','wxx_sb','yxx_sb','egon']
    res=filter(lambda x: x.endswith('sb')  ,name)
    print(list(res))
    
    ages=[18,19,10,23,99,30]
    res=filter(lambda n:n>=30,ages)
    print(list(res))
    
    info={
    'egon1':18,
    'egon2':28,
    'egon3':38,
    'egon4':48,
    }
    
    
    print(abs(-1))
    print(all([1,'a',True]))==》true
    print(all([1,'a',True,'']))==》false
    print(all(''))==》true
    但凡一个为真,整体为真
    print(any(0,'',None,False))
    print(any([]))
    
    print(bin(11))
    print(oct(11))
    print(hex(11))
    print(bool(0))  #0,None,空的布尔会为假
    
    res='你好'.encode('utf-8')
    res=bytes('你好'.encode('utf-8'))
    print(res)
    
    def func():
      pass
    print(callabe())
    加括号的就能调用
    
    print(chr(65))
    吧数字转成字母(ASCII表)
    print(ord('A'))
    吧字母转数字
    

    print(divmod(10,3)) #前端分页功能

    吧字符砖当成表达式拿到

    值为什么一定会传给X

  • 相关阅读:
    [NOIP2013提高组] CODEVS 3287 火车运输(MST+LCA)
    BZOJ 2763: [JLOI2011]飞行路线(最短路)
    BZOJ 1083: [SCOI2005]繁忙的都市(MST)
    USACO Seciton 5.4 Canada Tour(dp)
    HDOJ 3415 Max Sum of Max-K-sub-sequence(单调队列)
    POJ2823 Sliding Window(单调队列)
    USACO Section 5.4 TeleCowmunication(最小割)
    [IOI1996] USACO Section 5.3 Network of Schools(强连通分量)
    USACO Section 5.3 Milk Measuring (IDDFS+dp)
    USACO Section 5.3 Big Barn(dp)
  • 原文地址:https://www.cnblogs.com/shanjinghao/p/8694681.html
Copyright © 2020-2023  润新知