请稍候,加载中....

高阶函数

所谓高阶函数, 就是一个函数是另一个函数的参数或者返回值

函数作为参数

高阶函数示例1

# 高阶函数可以让编程获得很大的灵活性
# 传入不同的func, do可以执行不同的逻辑
def do(func, x, y):
    return func(x, y)

do(lambda x, y: x - y, 10, 20)
do(lambda x, y: x + y, 10, 20)

高阶函数示例2

# 内置函数max可以获得列表中值最大的一项
lists = [1, 2, 3, 4]
max(lists)

# 如果lists中每一项包含多个值,比如是一个字典或者元组
# 比较方式就需要指定
lists = [("a", 10), ("c", 1), ("d", 3), ("b", 12)]
# 根据元组第一项
def get_value(item):
    return item[0]

max(lists, key=get_value)
# 直接使用lambda表达式
max(lists, key=lambda x: x[0])

函数作为返回值

函数可以作为另一个函数的返回值返回

示例1: 函数作为返回值返回

def create_func():
    return lambda x, y: x-y

# create_func调用返回值是一个函数
myfun = create_func()

# myfun调用
myfun(1, 2)

示例2: 根据不同条件返回不同函数

def myfun(func_type="sum"):
    if func_type == "sum":
        return lambda x, y: x+y
    elif func_type=="sub":
        return lambda x,y: x-y
    elif func_type=="div":
        return lambda x, y: x / y
    elif func_type=="product":
        return lambda x,y: x *y

闭包环境

闭包是指内嵌函数作为外部函数的返回值返回,在其内部引用了外部嵌套域的变量,那么这个变量不会随着外部函数执行销毁,而是保留在内嵌函数环境内

闭包环境示例1:

def outer_func(name):
    def inner_func():
        print(name)
    return inner_func

myfun = outer_func("猿变")
myfun()

闭包环境示例2:

传入一个函数,然后对函数的行为进行修改。示例中,计算重力的函数有一个默认参数值g=9.8, 在其他地方需要输入不同的g值,可以通过修饰行为,使得计算不同地区重力值时有不同的重力值

a = 10
def outer_func():
    c = a
    def inner_func(b):
        return b + c
    return inner_func
func = outer_func()
a = 100
print(func(10))

闭包环境示例3:

下面示例中lambda表达式中的i参数具有延迟绑定的特点

funcs = [lambda x: x * i for i in range(5)]
# 所有的函数都是hello*4的效果
funcs[0]("hello")
funcs[1]("hello")

使用闭包即时绑定

funcs = [(lambda i: lambda x: x * i)(i)  for i in range(5)]
# 每个func中的i具有不同的值
funcs[0]("hello")
funcs[1]("hello")

高阶函数练习

# 使用内置函数min, 找出字典中value值最小的项
dicts = {"a": 100, "b": 80, "c": 60, "d": 40}

# 使用内置函数sorted对列表排序, 排序按照列表成员的第二个成员进行比较排序
# sorted(func, iter_obj)
lists = [(10,20),(3,5),(2,9)]

# 使用内置函数map对列表进行处理, 对每一个成员进行平方计算
# map(func, iter_obj) 
lists = [1, 2, 3, 4]

# 使用内置函数filter对列表进行处理, 筛选偶数项
# filter(func, iter_obj)
lists = [1, 2, 3, 4, 5, 6]

# 计算重力公式为w = mg, g为加速度, 在全球各地并不相同, 编写一个函数, 可以创建不同默认g值的重力计算函数

Python学习手册-