• python之路--day13---函数--三元表达式,递归,匿名函数,内置函数


    1,三元表达式

      格式:  

        为真时的结果  if  判定条件  else  为假时的结果  

      例子:

        print(1 if 5>3 else 0)  >>> 1

    2,递归

      递归调用时函数嵌套调用的一种特殊形式,函数在调用时,直接或间接调用了自身,就是递归调用

      递归的两个阶段:

        回溯:往前搜索,已达到目标   注意:一定要在满足某个条件的情况下结束回溯,否则就是无限递归

        递推:往回推

        例子:

    1 def age(n):
    2     if n == 1:
    3         return 18
    4     else:
    5         return age(n-1)+2
    6 
    7 print(age(5))

    总结:

      递归必须有一个明确的结束条件

      每次进入更深一层递归时,问题规模相比上次递归都应有所减少

      python递归效率低,每次递归都会保留上一次的状态,没有尾递归优化,但是对递归层级做了限制(可以通过  sys.setrecursionlimit  修改)。递归层数过多,会导致内存溢出

    3,匿名函数(没有函数名的函数)

      常用于:def func(): return 返回值   类似此类的简单函数

      lambda 参数 : 返回值 

      

      lambda x,y,z=1:x+y+z  

      #匿名函数与def 定义的函数有相同的作用域,但是匿名意味着引用计数为0,使用一次就释放,除非让其有名字

      func =  lambda x,y,z=1:x+y+z  

      func(1,2,3)  # 匿名函数让其有名字就失去了匿名函数的意义

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

    有名函数与匿名函数的对比

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

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

      

    内置函数(python解释器定义好的函数)

      reduce(func,iterable) 从可迭代系列中循环取值,参与第一个函数参数的计算,最后得到一个结果

    reduce(lambda x, y: x+y, [1,2,3,4,5]) # 使用 lambda 匿名函数

      bytes()将unicode指定编码后转化为bytes类型

      chr()返回值是传入整数对应的ascii字符

      divmod()将除数和余数的运算结果结合起来,返回一个包含商和余数的元组(a//b,a%b)

    >>>divmod(7, 2)
    (3, 1)
    >>> divmod(8, 2)
    (4, 0)
    >>> divmod(1+2j,1+0.5j)
    ((1+0j), 1.5j)

      enumerate()将一个可遍历的数据对象组合为一个索引序列,同时列出数据个数据下标,一般用在for循环

      

    >>>seasons = ['Spring', 'Summer', 'Fall', 'Winter']
    >>> list(enumerate(seasons))
    [(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]

      eval()执行一个字符串表达式,并返回表达式的值

    >>>x = 7
    >>> eval( '3 * x' )
    21
    >>> eval('pow(2,2)')
    4
    >>> eval('2 + 2')
    4
    >>> n=81
    >>> eval("n + 4")
    85

      filter(func,iterable)函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表

     

    import math
    def is_sqr(x):
        return math.sqrt(x) % 1 == 0
    newlist = filter(is_sqr, range(1, 101))
    print(newlist)

      id() 返回参数的内存地址序号

      input()获取输入

      iter(object)生成迭代器

      len()返回参数长度

      map(func,iterable)第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。

      

    map(lambda x: x ** 2, [1, 2, 3, 4, 5])  # 使用 lambda 匿名函数
    [1, 4, 9, 16, 25]
    
    >>> map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
    [3, 7, 11, 15, 19]

     

     max()返回给定参数的最大值,参数可以是系列

    egon male 18 3000
    alex male 38 30000
    wupeiqi female 28 20000
    yuanhao female 28 10000
    
    with open('db.txt') as f:
        items=(line.split() for line in f)
        info=[{'name':name,'sex':sex,'age':age,'salary':salary} 
              for name,sex,age,salary in items]
    
    print(max(info,key=lambda dic:dic['salary']))
    
    max(iterable, key, default) 求迭代器的最大值,其中iterable 为迭代器,max会for i in … 遍历一遍这个迭代器,然后将迭代器的每一个返回值当做参数传给key=func 中的func(一般用lambda表达式定义) ,然后将func的执行结果传给key,然后以key为标准进行大小的判断

      min()返回给定参数的最小值,参数可以是系列

      ord()返回给定参数的十进制数

    >>>ord('a')
    97
    >>> ord('b')
    98
    >>> ord('c')
    99

      sorted()对所有可迭代的对象进行排序操作。

    sort 与 sorted 区别:
    sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
    list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
    iterable -- 可迭代对象。
    cmp -- 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。
    key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
    reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
    >>>a = [5,7,6,3,4,1,2]
    >>> b = sorted(a)       # 保留原列表
    >>> a 
    [5, 7, 6, 3, 4, 1, 2]
    >>> b
    [1, 2, 3, 4, 5, 6, 7]
     
    >>> L=[('b',2),('a',1),('c',3),('d',4)]
    >>> sorted(L, cmp=lambda x,y:cmp(x[1],y[1]))   # 利用cmp函数
    [('a', 1), ('b', 2), ('c', 3), ('d', 4)]
    >>> sorted(L, key=lambda x:x[1])               # 利用key
    [('a', 1), ('b', 2), ('c', 3), ('d', 4)]
     
     
    >>> students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
    >>> sorted(students, key=lambda s: s[2])            # 按年龄排序
    [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
     
    >>> sorted(students, key=lambda s: s[2], reverse=True)       # 按降序
    [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
    >>>
  • 相关阅读:
    [网络流24题]方格取数
    [网络流24题]太空飞行计划
    网络流24题题解合集【不定期更新】【附常见套路分析】
    【优先队列】POJ3614-Sunscreen
    【优先队列】POJ1442-Black Box
    【Huffman树贪心+优先队列】POJ3253-Fence Repair
    【优先队列+贪心】POJ2431-Expedition
    【专题笔记】优先队列和堆
    【动态规划】POJ1664-放苹果
    【动态规划+二分查找】POJ2533&POJ1631最长上升子序列(LIS)
  • 原文地址:https://www.cnblogs.com/guodengjian/p/8696230.html
Copyright © 2020-2023  润新知