Python高阶函数——map/reduce/filter/sorted

# ## 高阶函数
from functools import reduce

print(abs(-10))
print(abs)  # 输出<built-in function abs>
# 函数本身可以赋值给变量
f = abs
print(f)
print(f(-19))


# #传入函数
# 将函数作为参数传入另一个函数
def add(x, y, f):
    return f(x) + f(y)


print(
    add(-6, -7, abs)
)


# 所谓高阶函数,就是让函数的参数能够接收别的函数

# #map()函数接收两个参数,一个是函数,另一个是Iterable(可迭代对象)
# map() 函数同样返回一个Iterable存储结果
def f(x):
    return x * x


r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
print(
    list(r)
)

# 返回迭代对象的字符串形式
print(
    list(map(str, [1, 2, 3, 4, 5, 6, 7, 8]))
)


# #reduce()函数接收两个参数,一个是函数,另一个是序列
# reduce()函数把结果继续和序列的下一个元素做累计计算
# 函数效果reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

# 定义一个求和函数
def add(x, y):
    return x + y


print(
    reduce(add, [1, 2, 3, 4, 5, 6, 7, 8, 9])
)

# 定义一个str2int函数
d = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}


def str2int(s):
    def fn(x, y):
        return 10 * x + y

    def char2int(s):
        return d[s]

    return reduce(fn, map(char2int, s))


print(
    str2int('95949748')
)


# 定义首字母大写函数
def normalize(name_list):
    def fn(name):
        if not isinstance(name, str):
            raise TypeError('Wrong type!')
        return str(name[0]).upper() + str(name[1:]).lower()

    return map(fn, name_list)


L1 = ['adam', 'LISA', 'barT']
print(
    list(normalize(L1))
)


# 定义一个求乘积函数
def product(number_list):
    return reduce(lambda x, y: x * y, number_list)


print(
    product([1, 2, 3, 4, 5, 6])
)


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

# 定义一个函数 过滤偶数 删去奇数

def is_odd(n):
    return n % 2 == 1


print(
    list(filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]))
)


# 定义一个函数 移除空字符串
def is_empty(s_list):
    return s_list and s_list.strip()


print(
    list(filter(is_empty, ['A', 'C', 'E', 'G', None, 'J', ' ']))
)

# # sort()函数 排序函数
a = [-30, -4, -5, 9, 6, 7]
s = ['Z', 'a', 'c', 'F']
print(
    sorted(a, key=abs)  # 按绝对值排序
)
print(
    sorted(a)  # 按从小到大排序
)
print(
    sorted(a, reverse=True)  # 从大到小排序
)

print(
    sorted(s)  # 按ASCII的大小比较的,'Z' < 'a',大写字母Z会排在小写字母a的前面。
)
print(
    sorted(s, key=str.lower)  # 按转为小写后的顺序来排。
)

L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
# 按照名字排序
print(
    sorted(L, key=lambda x: x[0])
)
# 按照后面数字排序
print(
    sorted(L, key=lambda x: x[1])
)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值