python高阶函数

定义

当一个函数 接收 另一个函数作为参数, 它就是 高阶函数

示例

def func(a, x, y):
    a(x, y)  # a就是传递的 函数参数f,  执行 a 相当于 执行  f


def f(x, y):
    print(x + y)


func(f, 1, 2)  # 3, 在函数f执行过程中,输出 3

四大高阶函数

map(func, iterable)

可迭代对象 中的每个值 按照 第一个参数( 函数)的 规则 依次 处理, 得到一个 新的 迭代器 对象

def func(alist):

	def sqr(x):
        return x * x

    r = map(sqr, alist) # r是迭代器对象

    return list(r)  # 将迭代器对象转换为列表


r = func([11, 22, 33, 44, 55])
print(r)
# 定义函数, 接收 列表 作为参数 , 返回一个 包含 绝对值  的新列表
# abs():python内置函数,求一个数的绝对值
def func(alist):
    # map 高阶函数需要的参数,不用管是内置的,还是自定义的
    r = map(abs, alist)
    return list(r)


r = func([-12, 34, 56, -98])

print(r)  # [12, 34, 56, 98]

reduce(func, iterable)

将可迭代对象中所有的元素,按照第一个 函数的规则, 连续操作,得到一个 具体的数据

from functools import reduce


# 自定义一个Mysum()函数,接收一个列表作为参数, 返回列表中所有元素之和
def mysum(alist):
    def add(x, y):
        return x + y

    r = reduce(add, alist) # reduce 的结果是一个具体的值

    return r


r = mysum([1, 2, 3, 4, 5])
print(r)  # 15

filter(func, iterable)

按照第一个函数的返回值对可迭代对象中所有的数据进行过滤,得到一个包含过滤后结果的迭代器对象

# 自定义一个filterNumber()函数,接收一个列表作为参数, 返回一个 包含偶数 的列表

def filterNumber(alist):
    def is_even(x):
        """如果函数的返回结果为True, 对应的元素可以得到"""
        if x % 2 == 0:
            return True

    r = filter(is_even, alist)  # r也是迭代器对象

    return list(r)  # 通过类型转换,将迭代器中数据取出


r = filterNumber([1, 2, 3, 4, 5, 6])
print(r)  # [2, 4, 6]]
# 自定义一个函数 sevenNumber()函数,接收一个列表作为参数, 返回一个 包含 "逢7必过" 数字的新列表
def sevenNumber(alist):
    def f(x):
        # 判断为7的倍数,返回True
        if x % 7 == 0 or '7' in str(x):
            return True

    r = filter(f, alist)  # r是迭代器对象

    return list(r)


r = sevenNumber(range(1, 101))
print(r)

sorted(iterable, key=func, reverse=False)

对列表进行排序,结果是一个排序后的列表,默认升序

alist = [21, 14, -67, -34, 19]

# 按照 数字大小 升序 排序
r = sorted(alist)
print(r)  # [-67, -34, 14, 19, 21]

# 按照 数字大小 降序 排序
r = sorted(alist, reverse=True)
print(r)  # [21, 19, 14, -34, -67]

# 按照每 个数字的绝对值 升序 排序
r = sorted(alist, key=abs)
print(r)  # [14, 19, 21, -34, -67]

# 按照 每个数字的绝对值 降序 排序
r = sorted(alist, key=abs, reverse=True)
print(r)  # [-67, -34, 21, 19, 14]

sort()列表的内置方法,不需要接收结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值