Python_高阶函数

高阶函数: 函数的参数或者返回值都是一个函数,那么这样的函数我们称为高阶函数

高阶函数1 -> 函数的参数是一个函数类型

def calculate_value(new_func): # new_func 如果是一个函数类型的参数,那么calculate_value就是高阶函数

    num1 = 1
    num2 = 2

    result = new_func(num1, num2)

    print(result)


# def xxx(x, y):
#     return x + y


calculate_value(lambda x, y: x + y)

高阶函数2 -> 函数的返回值是一个函数类型

def show_info():
    print("show_info执行了")

    # 特殊的用法:在python里面支持在一个函数里面在定义一个函数
    def inner_func():
        print("inner_func函数执行了")

    # 这里返回了inner_func函数,那么show_info就是一个高阶函数
    return inner_func


new_func = show_info()  # =》inner_func
new_func()

 

高阶函数-map、filter、reduce

映射类map()

接收两个参数,一个是函数,一个是Iterablemap将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。

示例一:返回列表中元素平方后的结果

list_x = [1, 2, 3, 4, 5]
print(map(lambda x : x*x, list_x))
print(list(map(lambda x : x*x, list_x)))

<map object at 0x0000011C145567B8>
[1, 4, 9, 16, 25]

示例二:对两个列表中的元素对应求和

list_x = [1, 2, 3, 4, 5, 6]
list_y = [1, 2, 3, 4, 5]
print(list(map(lambda x,y : x+y, list_x, list_y)))


[2, 4, 6, 8, 10]

过滤类filter()

map()类似,filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。

 

 

 示例一:

my_list = ['ab', 'cb', 'abc']

def search_value(value):
    # 过滤条件是结尾是b的数据
    return value.endswith("b")

# 根据指定的功能函数过滤相关的数据,返回一个过滤结果对象
new_filter = filter(search_value, my_list)

使用匿名函数进行传参

new_filter = filter(lambda value: value.endswith("b"), my_list)
print(new_filter, type(new_filter))

累积运算函数reduce()

根据指定函数的功能对容器类型的中每一个数据进行相关的计算

 

利用reduce函数把元组转成字符串, 主要是做计算的

my_tuple = ('a', 'b', 'c')


# 这个函数完成字符串拼接
def join_str(v1, v2):
     return v1 + v2

# 执行流程:根据join_str 函数对元组中的每一个数据进行拼接字符串操作,返回一个新的字符串数据
result = reduce(join_str, my_tuple)

 

使用匿名函数进行传参

result = reduce(lambda x, y: x + y, my_tuple)

 

序列[1, 3, 5, 7, 9]变换成整数13579

from functools import reduce
def fn(x, y):
        return x * 10 + y

reduce(fn, [1, 3, 5, 7, 9])

 

 
posted @ 2020-02-27 11:11  Tracydzf  阅读(159)  评论(0)    收藏  举报