• python 六剑客(匿名函数和内建函数)


    一. 匿名函数lambda

     1.lambda只是一个表达式,函数体比def简单很多。

     2.lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去

    >>> def add(a,b):
    ...     return a+b
    ...
    >>> add(1,4)
    5
    >>>
    >>> lambda x:x+2
    <function <lambda> at 0x00000273C937B8C8>  #函数
    >>>
    >>> a=lambda x,y:x+y
    >>> a(2,6)
    8

    >>> f = [lambda x:x*i for i in range(4)]
    >>> f[1](1)
    3
    >>> f1 = [lambda i=i: i*i for i in range(4)]
    >>> f1[3]()
    9

    二 . filter()函数

    filter()函数是 Python 内置的有用高阶函数,filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,

    返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。

    例如,在一个list中,删掉偶数,只保留奇数,可以这么写:

    def is_odd(n):
        return n % 2 == 1
    
    filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15])
    
    结果: [1, 5, 9, 15]

    学习了lambda函数后,可以一行搞定
    >>> list(filter(lambda x:x%2, [1, 2, 4, 5, 6, 9, 10, 15]))
    [1, 5, 9, 15]
    注意:python3 起,filter 函数返回的对象从列表改为 filter object(迭代器),
    想要使用的话加上list(),将迭代器转换成列表,例如:利用filter(),可以完成很多有用的功能,删除 None 或者空字符串:

    >>> def not_empty(s):
    ...     return s and s.strip()
    ...
    >>> filter(not_empty, ['A', '', 'B', None, 'C', '  '])
    <filter object at 0x0000020833998AC8>
    >>>
    >>> list(filter(not_empty, ['A', '', 'B', None, 'C', '  ']))
    ['A', 'B', 'C']

    Python strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。

    注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。

    三. map() 函数

    map() 会根据提供的函数对指定序列做映射。
    第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。

    map(function, iterable, …)

      • function – 函数,有两个参数
      • iterable – 一个或多个序列
      • 将结果作为list返回
    >>> def abc(a, b, c):
    ...     return a*10000 + b*100 + c
    ...
    >>> list1 = [11,22,33]
    >>> list2 = [44,55,66]
    >>> list3 = [77,88,99]
    >>> map(abc,list1,list2,list3)
    <map object at 0x0000023E269A8BE0>
    >>> list(map(abc,list1,list2,list3))
    [114477, 225588, 336699]


    list(map(lambda x: x**2, range(5)))
    [0, 1, 4, 9, 16]

    四.reduce()函数
    reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,
    reduce()传入的函数 f 必须接收两个参数,reduce()对list的每个元素反复调用函数f,并返回最终结果值。
    def add(x, y):
        return x + y
    >>> reduce(add, [1, 3, 5, 7, 9])
    25

    调用 reduce(f, [1, 3, 5, 7, 9])时,reduce函数将做如下计算:

    先计算头两个元素:f(1, 3),结果为4
    再把结果和第3个元素计算:f(4, 5),结果为9
    再把结果和第4个元素计算:f(9, 7),结果为16
    再把结果和第5个元素计算:f(16, 9),结果为25
    由于没有更多的元素了,计算结束,返回结果25
     
     
    五. 切片
     a=[1,2,3,4,5,6,7,8,9]
    >>>
    >>> a[::-1]
    [9, 8, 7, 6, 5, 4, 3, 2, 1]
    >>>
    >>> a[::4]    #步长为四
    [1, 5, 9]
     
     
    六.推导列表
    [表达式 for 变量 in 列表]    或者  [表达式 for 变量 in 列表 if 条件]
     
    例如,假设我们要创建一个平方数组成的列表,比如:
    >>> squares = []
    >>> for x in range(10):
    ...     squares.append(x**2)
    ...
    >>> print(squares)
    [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
    >>>
    我们也可以通过下面的方式获得相同的列表:
    >>> squares = [x**2 for x in range(10)]
    >>> [x**2 for x in range(10)]
    [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
     
    下面推导列表是求字典中key为整型的数之和
     
    >>> [key  for key in {1:'a',2:"b","a":3} if isinstance(key,int)]
    [1, 2]
    >>> sum([key  for key in {1:'a',2:"b","a":3} if isinstance(key,int)])
    3
     
     


  • 相关阅读:
    python当中同步接口和异步接口怎么测试【杭州多测师_王sir】【杭州多测师】
    Python多线程Threading【杭州多测师_王sir】【杭州多测师】
    采购发票缩减/发票差异
    取消发票凭证/定义冲销原因/贷方凭证/事后借记
    发票多科目/多部门分配
    R语言中的BP神经网络模型分析学生成绩|附代码数据
    人工神经网络ANN中的前向传播和R语言分析学生成绩数据案例
    R代做编程辅导:CSC120 Euclidean Minimum Weight Matching
    Algorithm代做编程辅导:CS406 Greed Algorithm
    Database代做编程辅导:ECS165A Normal Form/BCNF/3NF/4NF
  • 原文地址:https://www.cnblogs.com/liyujie1978/p/9586129.html
Copyright © 2020-2023  润新知