python高阶函数(python基础学习)

学习高阶函数之前,需要先搞清楚

变量可以指向一个函数,函数名其实就是指向函数的变量

>>> f = abs
>>> f
<built-in function abs>
>>> f(-10)
10
>>>

高阶函数

能接收函数做参数的函数。

变量可以指向函数,函数的参数可以接收变量;

一个函数可以接收另一个函数作为参数;

能接收函数作为参数的函数就称之为高阶函数

>>> def fun(x,y,f):
...     return f(x)+f(y)
...
>>> result = fun(-5,7,abs)
>>> result
12
>>>

下面记录几个python中内置的高阶函数(使用频率相对较高)。

map(f,*iter)函数:必须接收一个f和一个list,根据提供的函数对指定序列做映射。

例:将列表中的元素统一改为首字母大写,其余字母小写。

def format_name(s):
    return s[0].upper() + s[1:].lower()
        
print map(format_name, ['adam', 'LISA', 'barT'])

reduce(f,*args)函数:必须接收一个f和一个list,对序列的每个元素反复的调用函数,做累计操作。

例:对列表的每个元素做累加操作

def prod(x, y):
    return x+y

print reduce(prod, [2, 4, 5, 7, 12]) # 2+4+5+7+12
print reduce(prod,[1,3,5,7,9],100)  # 100+1+3+5+7+9

filter(f,*args)函数:必须接收一个f和一个list,对list中的元素进行过滤操作,list中元素不符合函数的要求的过滤掉,返回满足函数要求的元素组成一个新的list返回。

例:返回0-100中平方根是整数的数,不是整数的过滤掉

import math

def is_sqr(s):
    r = int(math.sqrt(s))
    return r*r == s
    

print filter(is_sqr,range(1,101))  #  [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

sorted()函数:实现升序排序

>>> sorted([1,5,4,2,2,8,4])
[1, 2, 2, 4, 4, 5, 8]

sorted()函数也可以实现自定义排序,此时就是一个高阶函数。它可以接收一个比较函数cmp来实现自定义排序,比较函数的定义是,传入两个待比较的元素 x, y,如果 x 应该排在 y 的前面,返回 -1,如果 x 应该排在 y 的后面,返回 1。如果 x 和 y 相等,返回 0。(如果想要实现倒序则反之)

sorted(list,f)函数:对list实现按照f函数指定的排序规则排序。

例:实现对字符串忽略大小写进行排序。

def ignore_case(s1,s2):
    u1=s1.upper()
    u2=s2.upper()
    if u1>u2:
        return 1
    if u1<u2:
        return -1
    return 0
    
print sorted(['bob', 'about', 'Zoo', 'Credit'],ignore_case)  # ['about', 'bob', 'Credit', 'Zoo']

例:对list中的值实现倒序排序。

def reversed_cmp(x,y):
    if x>y:
        return -1
    if x<y:
        return 1
    return 0
    
print(sorted([1,2,3,4,5],reversed_cmp))  # [5, 4, 3, 2, 1]

猜你喜欢

转载自blog.csdn.net/loner_fang/article/details/80861018