美文网首页
python 高阶函数

python 高阶函数

作者: 风___________ | 来源:发表于2021-04-20 13:41 被阅读0次

    1. map/reduce函数

    //  map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。
    def f(x): 
     return x**2
    list  = [1,2,3,4,5,6]
    
    >>> result = map(f,list)
    >>> list(result)    # Iterator是惰性序列,因此通过list()函数让它把整个序列都计算出来并返回一个list
    [1, 4, 9, 16, 25, 36]
    
    // reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算。
    # reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
    eg:
    def add(x,y):
     return x+y
    
    reduce(add,[1, 3, 5, 7, 9])
    # 过程是 add(add(add(add(1,3),5),7),9) 1+3 +5 +7 +9 =>
    >>> 25
    
    // 应用:实现一个函数,能把string转化为int
    >>> from functools import reduce
    >>> def char2number(s):
    ...  dict = {'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}
    ...  return dict[s]
    ... 
    >>> def fn(x,y):
    ...  return x *10 +y
    ... 
    >>> reduce(fn,map(char2number,'13579'))
    13579
    >>> 
    # 整理一下
    from functools import reduce
    DIGITS = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
    def str2int(s):
     def char2num(s):
      return DIGITS[s]
     def fn(x,y):
      return x*10+y
     return reduce(fn,map(char2num,s))
    
    # 用lambda函数进一步简化成:
    from functools import reduce
    DIGITS = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
    def char2num(s):
        return DIGITS[s]
    def str2int(s):
     return reduce(lambda x,y: x*10+y,map(char2num,s))
    
    

    2. filter:Python内建的filter()函数用于过滤序列

    // filter两个参数:
    filter(指向参数是队列对象函数的变量,指向list的变量)
    
    // 筛选奇数
    def is_odd(n):
        return n % 2 == 1
    
    list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))
    >>>  [1, 5, 9, 15]
    // 空字符串删掉
    def not_empty(s):
        return s and s.strip()
    
    list(filter(not_empty, ['A', '', 'B', None, 'C', '  ']))
    >>>   ['A', 'B', 'C']
    
    
    

    3. sorted:Python内建的sorted()函数用于排序序列

    // sorted()函数就可以对list进行排序:
    # 直接排序
    >>> sorted([36, 5, -12, 9, -21])
    [-21, -12, 5, 9, 36]
    # 指定key(key指定的函数将作用于list的每一个元素上,并根据key函数返回的结果进行排序)
    >>> sorted([36, 5, -12, 9, -21], key=abs)
    [5, 9, -12, -21, 36]
    >>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower)
    ['about', 'bob', 'Credit', 'Zoo']
    # reverse结果反转,参数类型是指向bool类型的变量
    >>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True)
    ['Zoo', 'Credit', 'bob', 'about']
    
    // 实际运用的例子:
    # -*- coding: utf-8 -*-
    L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
    def by_name(t):
     return t[0]
    def by_score(t):
     return -t[1]
    
    L2 = sorted(L, key=by_name)
    print(L2)
    
    L3 = sorted(L, key= by_score)
    print(L2)
    
    
    总结:
    key指定的函数将作用于list的每一个元素上,并根据key函数返回的结果进行排序.所以key指向的函数要有返回值,参数是list的每一个元素。
    

    相关文章

      网友评论

          本文标题:python 高阶函数

          本文链接:https://www.haomeiwen.com/subject/gaqwlltx.html