zoukankan      html  css  js  c++  java
  • 三元表达式,递归,内置函数

    三元表达式

    三元表达式仅应用于:

    1.条件成立返回一个值

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

    若一般函数表达如下

    比大小:

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

    若我们用三元表达式表达:

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

    由此对比 三元表达式

    就会比一般函数表达简单 不复杂, 由之前的几行代码 最后3行代码搞定

    二、函数的递归:

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

    直接调用:
    def foo():
        print('from foo')
        foo()
    foo()
    
    直接调用
    第一层结束foo(). 需要第2层代码块里的foo()结束,而第二层结束又需要冲洗调用foo()。。。。。以此类推 。。  死循环。
    这个主要是讲 第一层结束 需要第二层给出结果, 第二层结束需要第三层给出结果, 直至给个结果出来 (结束回溯)才会重新反馈给上一层,然后由上一层的结果在返回给上上一层, 以此类推。直至调用的函数有了结果
    间接调用
    def bar():
        print('from bar')
        foo()
    
    def foo():
        print('from foo')
        bar()
    
    foo()
    
    原理同上,调用foo()  在运行foo()代码块 需要调用bar()由bar ()的 结果来给到foo(),在运行bar()代码块时也会调用foo(), 由foo()的结果来给到bar().  虽然这个也是一个死循环。但是能很清楚的讲述递归 含义

    递归:

    递归分为两个阶段:

    1:回溯:

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

    2、递推

    总结:

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

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

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

    完整的递推

    age(5)=age(4)+2
    age(4)=age(3)+2
    age(3)=age(2)+2
    age(2)=age(1)+2
    age(1)=18
    
    def age(n):
        
        if n ==1:
            return 18
        return age(n-1)+2
    
    age(5)
    
    print(age(5))
    #打印结果 26

    小练习

    要求把列表里每个元素都打印出来
    items=[1,[2,[3,[4,[5,[6,[7,[8,]]]]]]]]
    def tell(l):
        for item in l:
            if type(item) is not list:
                print(item)
            else:
                tell(item)
    tell(items)

    匿名函数:

    匿名函数:没有名字,一次性使用, 随时定义

    有名函数:循环使用,保存了名字,通过名字就可以重复引用函数功能

    强调:

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

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

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

    匿名函数(lambda)应用:lambda x:代码块 ,nums   (    nums   是给前面的代码块赋值的)

    salaries={
        'egon':3000,
        'alex':100000000,
        'wupeiqi':10000,
        'yuanhao':2000
    }
    def get(k):
        return salaries[k]
    print(max(salaries,key=lambda x:salaries[x]))
    #key=lambda x:salaries[x]   这个是出薪资最高的那个人的名字 而不是字典里key 的名字按照字母顺序 比出高低 
    lambda x:salaries[x] 这就是一个匿名函数 比完就可以不用再用直接扔掉


    print(min(salaries,key=lambda x:salaries[x]))
    打印结果 yuanhao

    与sorted连用   排序

    salaries={
        'egon':3000,
        'alex':100000000,
        'wupeiqi':10000,
        'yuanhao':2000
    }
    
    salaries=sorted(salaries)
    print(salaries)#['alex', 'egon', 'wupeiqi', 'yuanhao']
                    #默认按照字典的键的大小排序,不是按照工资高低排序

    
    
    salaries=sorted(salaries,key=lambda x:salaries[x])
    print(salaries)
    #['yuanhao', 'egon', 'wupeiqi', 'alex'] 这个是按照升序的方式排列

    salaries=sorted(salaries,key=lambda x:salaries[x],reverse=True) #降序
    # print(salaries) # 这个是按照降序的方式排列
    ###打印结果['alex', 'wupeiqi', 'egon', 'yuanhao']



    与map 连用  映射关系

    求出下列列表元素的平方并组成个列表
    nums=[1,2,3,4,5]
    res=map(lambda x:x**2,nums)
    print(list(res))
    #打印结果  [1, 4, 9, 16, 25]
    把下面所有人的名字户后面都加上'_SB'
    names=['alex','wpeiqi','yuanhao'] res=map(lambda x:x+'_SB',names) print(list(res)) #打印结果 ['alex_SB', 'wpeiqi_SB', 'yuanhao_SB']
    下面名字中egon 后面加上_NB ,其他加_SB。这里要用到三元表达式与匿名函数的结合使用
    names=['alex','wpeiqi','yuanhao','egon']
    res=map(lambda x:x+'_NB' if x=='egon' else x+'_SB',names)
    print(list(res))
    
    打印结果['alex_SB', 'wpeiqi_SB', 'yuanhao_SB', 'egon_NB']

    reduce 合并,与 from   functools import reduce 连用

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

    filter 过滤

    将名字中没有sb结尾的名字过滤掉
    names = ['ales_sb','wxx_sb','yxx_sb','egon'] res=filter(lambda x:True if x.endswith('sb') else False,names ) print(list(res)) #打印结果 ['ales_sb', 'wxx_sb', 'yxx_sb'] 将egon 过滤掉
    选出年龄超过30岁以上的年龄
    
    ages=[18,19.25,33,50,99]
    res=filter(lambda  x:x>30,ages)
    print(list(res))
    
    #[33, 50, 99]
    salaries ={
        'egon':3000,
        'alex':100000000,
        'wupeiqi':10000,
        'yuanhao':2000
    }
    
    res=filter(lambda k:salaries[k]>10000,salaries)
    print(list(res))
    #打印结果# ['alex']

    内置函数  表达方式都是 bytes()/ chr()/

    bytes   把别的字符编码转成bytes 的字符编码

    chr  就用在一个范围内的整数参数  返回一个对应的字符

    divmod    返回的结果   除法取整 以及 余数,   要 给2个参数值。

    enumerate 多用于for循环中 对于一个可迭代对象,enumerate 将其组成一个索引序列,利用他可以同时获得一个索引和值

    eval       将字符串str当成有效的表达式来求值并返回计算借故偶

    filter            过滤 将所不需要的内容过滤掉

    id           查看内存地址

    input      交互输入

    iter        加可迭代对象,得到的是 一个生成器对象

    len        统计长度

    map       一一映射关系

    max      求最大值

    min   求最小值

    ord   是chr()函数的配对函数,以一个字符串作为参数,返回对应的ascii数值

    sorted   升序排序

    pow(2,3,3) 里面要传3个参数   表达的意思为 2 的3次方 在除以3  最后取余  得出的结果为1个返回值。

    reversed():反转,

    round():四舍五入

    slice():切片 可以给   slice()命名一个变量名,  可以给多个数据按照同一个切片要求取值

    sum() 求和

    zip 拉链

    left='hello'
    right={'x':1,'y':2,'z':3}
    
    res=zip(left,right)
    print(list(res))   拉链式的
  • 相关阅读:
    End of 2007, where are you?
    2007年,前进!
    PHP框架Yii快速搭建高并发网站
    需要 gmail 与 wallop 邀请的 请留言给 email
    开始关注Mono了
    百度,阿里巴巴,google
    重返 cnblogs.com
    解决VMware虚拟机桥接不能上网的问题
    SecureCRT
    linux的ssh和sshd配置
  • 原文地址:https://www.cnblogs.com/lx3822/p/8696197.html
Copyright © 2011-2022 走看看