Python函数式编程

这里面我废话不多说,具体定义自己去看吧

1、高阶函数 : map/reduce/filter/sorted

map函数:

ls = [1, 2, 3, 4, 5, 6, 7, 8, 9]
ls2 = [str(i) for i in ls]
ls3 = list(map(str, ls))               #  map 函数
ls4 = list(map(lambda x: str(x), ls))  # map ➕ 匿名函数
print(ls2)  #  ['1', '2', '3', '4', '5', '6', '7', '8', '9']
print(ls3)  #  ['1', '2', '3', '4', '5', '6', '7', '8', '9']
print(ls4)  #  ['1', '2', '3', '4', '5', '6', '7', '8', '9']

# 字典的map取值
DIGITS = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
print(list(map(lambda x: DIGITS[x], DIGITS)))  # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

reduce 函数

#reduce把一个函数作用在一个序列[x1, x2, x3, …]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算
#reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

from functools import reduce
    ls = [1, 2, 3, 4]
def add(x, y):
    return x + y
result = reduce(add, ls)
print(result)  # 10

例子2, 拼接 ls = [1, 2, 3, 4]

def func(x, y):
    return x * 10 + y
result2 =reduce(func, ls)
print(result2)  # 1234

reduce 和 map 函数的联合使用

print(reduce(lambda x, y: x * 10 + y, map(lambda x: DIGITS[x], DIGITS)))  # 123456789
  • filter函数的使用

filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素

filter()这个高阶函数,关键在于正确实现一个“筛选”函数

例子1 只要奇数

def is_odd(n):
    return n % 2 == 1
result1 = list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))
result2 = list(filter(lambda x: x % 2 == 1, [1, 2, 4, 5, 6, 9, 10, 15]))
print(result1)   # 结果: [1, 5, 9, 15]
print(result2)   # 结果: [1, 5, 9, 15]

sorted 函数

Python内置的sorted()函数就可以对list进行排序

ls = [36, 5, -12, 9, -21]
sort_ls = sorted(ls)
print(sort_ls)   # 结果: [-21, -12, 5, 9, 36]

加上参数 key

sort_ls2 = sorted(ls, key=abs)
print(sort_ls2)  # 结果: [5, 9, -12, -21, 36]

key 还可以为 str.lower

ls = ["B", "a", "d", "C"]
sort_ls3 = sorted(ls)
print(sort_ls3)  # 结果: ['B', 'C', 'a', 'd']

设置key = str.lower 表示全部小写,或者 key = str.upper 表示全部大写 也可以说忽略大小写

sort_ls4 = sorted(ls, key=str.lower)
print(sort_ls4)  # 结果: ['a', 'B', 'C', 'd']

函数返回函数

def count():
    fs = []
    for i in range(1, 4):
        def f():
             return i*i
        fs.append(f)
        print(fs[0]())
    return fs
f1, f2, f3 = count()
fs = []
for i in range(1, 4):
    def f():
        return i * i
    fs.append(f)
print(fs)    # [<function f at 0x00000200F1FB6950>, <function f at 0x00000200F1FB69D8>, <function f at 0x00000200F1FB6A60>] 三个函数
print(f1())  # 最后得到的都是9
print(f2())  # 最后得到的都是9
print(f3())  # 最后得到的都是9

匿名函数 : lambda 表达式

举一个简单的例子:

lambda x: x+2
相当于:
def f(x):
	return x+2

偏函数:

import functools
int2 = functools.partial(int, base=2)
int2('1000000')    #  64
int2('1010101')   # 85

装饰器函数:

这个在后面的文章中我会做一个详细的模块来单独拿出来写,这个还是比较重要的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值