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

    一、三元表达式

         三元表达式本身是为了简化代码,仅用于简单的函数,只有一个的判定条件

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

     

    二、递归函数

           1、定义:

              在函数调用过程中直接或者间接的调用函数本身

            2、两种调用方式

    #直接调用
    def foo():
        print('from foo')
        foo()
    
    foo()
    
    #间接调用
    def bar():
        print('from bar')
        foo()
    
    def foo():
        print('from foo')
        bar()
    
    foo()

           3、递归分为两个过程

                 1、回溯:一定要满足某种条件回溯,否则无限递归

                 2、递推:得到值返回递推每一层的值,一层层的结束

          

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

     

    三、匿名函数  

          1、匿名函数的三点强调     

          1 匿名的目的就是要没有名字,给匿名函数赋给一个名字是没有意义的
          2 匿名函数的参数规则、作用域关系与有名函数是一样的
          3 匿名函数的函数体通常应该是 一个表达式,该表达式必须要有一个返回值

         2、匿名函数的应用
    salaries={
        'sxx':3000,
        'qzl':100000000,
        'wxf':10000,
        'lh':2000
    }
    print(max(salaries,key=lambda x:salaries[x]))
    print(min(salaries,key=lambda x:salaries[x]))
    #排序
    salaries=sorted(salaries,key=lambda x:salaries[x])  #默认是升序排
    salaries=sorted(salaries,key=lambda x:salaries[x],reverse=True) #降序
    nums=[1,11,9]
    nums=sorted(nums) #默认是升序
    print(nums)
    # map:映射,
    nums=[1,2,3,4,5]
    res=map(lambda x:x**2,nums)
    name=['a','b','c','d']
    res=map(lambda x:x+'_sb',name)
    qes=map(lambda x:x+'_nb' if x=='c' else x+'_sb',name)
    print(list(res))
    print(list(qes))
    #reduce:合并
    from functools import reduce
    res=reduce(lambda x,y:x+y,range(101),0)
    print(res)
    l=['a','b','c','d']
    qes=reduce(lambda x,y:x+y'',l)
    print(qes)
    
    #filter过滤判断为假的值
    name=['qzl_nb','hwl_nb','lx_nb','sxx']
    res=filter(lambda x: x.endswith('nb') ,name)
    print(list(res))
    age=[12,18,45,55,96]
    res=filter(lambda x:x>30,age)
    print(list(res))

     

    四、内置函数

     

    练习

    #1、文件内容如下, 标题为: 姓名, 性别, 年纪, 薪资
    #egon male 18 3000
    #alex male 38 30000
    #wupeiqi female 28 20000
    #yuanhao female 28 10000
    #要求:
    #从文件中取出每一条记录放入列表中,
    #列表的每个元素都是
    #{'name': 'egon', 'sex': 'male', 'age': 18, 'salary': 3000}
    #的形式
    with open('x.txt','r',encoding='utf-8')as f:
        c = (line.split()for line in f)
        l=[{'name':name,'sex':sex,'age':age,'salary':salary} for  name,sex,age,salary in c]
        print(l)
    #2根据1得到的列表, 取出薪资最高的人的信息
    print(max(l, key=lambda dic:dic['salary']))
    #3根据1得到的列表, 取出最年轻的人的信息
    print(min(l, key=lambda dic:dic['age']))
    #4根据1得到的列表, 将每个人的信息中的名字映射成首字母大写的形式
    l_new=map(lambda item:{'name':item['name'].capitalize(),#首字母大写
                              'sex':item['sex'],
                              'age':item['age'],
                              'salary':item['salary']},l)
    
    print(list(l_new))
    #5.根据1得到的列表, 过滤掉名字以a开头的人的信息
    res=filter(lambda item: not item['name'].startswith('a') ,l)
    print(list(res))
    
    #6使用递归打印斐波那契数列(前两个数的和得到第三个数,如:0 1 1 2 3 4 7...)
    n n+1
    def func(x,y,stop):
        print(x, end=' ')
        if  x>stop :
            return
        func(y,x+y,stop)
    func(0,1,15)
    # 7、文件shopping.txt内容如下
    #         mac,2000,3
    #         lenovo,3000,10
    #         tesla,1000000,10
    #         chicken,200,1
    # 
    #         求总共花了多少钱?
    #         打印出所有的商品信息,格式为
    #         [{'name':'xxx','price':'3333','count':3},....]
    #         求单价大于10000的商品信息,格式同上
    with open('a.txt', encoding='utf-8') as f:
        jg = [int(line.split(',')[1]) for line in f ]
        print(sum(jg))
    
    with open('a.txt', encoding='utf-8') as f:
        c=(line.strip('
    ').split(',') for line in f )
        l=[{'name':name,'price':price,'count':count}for name,price,count in c]
        print(l)
    
    res=filter(lambda dic:int(dic['price'])>10000,l )
    print(list(res))

    您的资助是我最大的动力!
    金额随意,欢迎来赏!

    如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的推荐按钮。
    如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的关注我

    如果,想给予我更多的鼓励,求打

    因为,我的写作热情也离不开您的肯定支持,感谢您的阅读,我是【小宋】!

  • 相关阅读:
    EclipseTool_v1.0.4(eclipse整合开发工具)
    51单片机堆栈深入剖析
    3.进程
    解决卡巴斯基安装失败的一个方法.
    9.串口操作之API篇 ReadFile WriteFile CloseHandle 及总结
    2.内核对象之<创建和关闭内核对象,跨进程共享>
    1.内核对象之<什么是内核对象,使用计数及安全性>
    TeeChart使用小技巧之 点击Series显示名称
    TeeChart使用小技巧之 曲线分页显示,轴分别显示日期
    8.串口操作之API篇 PurgeComm ClearCommError
  • 原文地址:https://www.cnblogs.com/songxuexiang/p/8698650.html
Copyright © 2011-2022 走看看