Python的函数式编程之偏函数和柯里化

偏函数和柯里化是函数式编程中常用的技术,它们可以帮助我们更灵活地处理函数和参数。下面我将详细介绍偏函数和柯里化的概念和用法,并列举10个实用的场景代码。

1. 偏函数(Partial Functions):

偏函数是通过固定函数的部分参数来创建一个新的函数。这样可以将一个多参数的函数转化为一个单参数的函数,方便在后续使用时减少重复的参数传递。

from functools import partial

def power(base, exponent):
    return base ** exponent

square = partial(power, exponent=2)
cube = partial(power, exponent=3)

print(square(5))  # 输出:25
print(cube(5))    # 输出:125

2. 柯里化(Currying):

柯里化是将一个多参数的函数转化为一系列单参数的函数,每个函数接收部分参数,并返回一个新的函数,直到所有参数都被传递完毕,最后返回函数的执行结果。

from functools import partial

def add(a, b, c):
    return a + b + c

curried_add = partial(partial(partial, add), 1)
result = curried_add(2)(3)

print(result)  # 输出:6

3. 使用偏函数处理默认参数:

from functools import partial

def greet(name, greeting="Hello"):
    print(f"{greeting}, {name}!")

greet_john = partial(greet, name="John")
greet_john()  # 输出:Hello, John!

4. 使用偏函数处理类型转换:

from functools import partial

int_base_2 = partial(int, base=2)

print(int_base_2("101"))  # 输出:5

5. 使用偏函数处理排序:

from functools import partial

numbers = [5, 2, 8, 1, 9]
sort_desc = partial(sorted, reverse=True)
print(sort_desc(numbers))  # 输出:[9, 8, 5, 2, 1]

6. 使用偏函数处理日志输出:

from functools import partial

def log(level, message):
    print(f"[{level}] {message}")

info_log = partial(log, level="INFO")
error_log = partial(log, level="ERROR")

info_log("This is an informational message")
error_log("An error occurred")

7. 使用柯里化创建通用的函数组合器:

from functools import partial

def compose(f, g):
    return lambda x: f(g(x))

def add_one(x):
    return x + 1

def square(x):
    return x * x

add_one_then_square = compose(square, add_one)

print(add_one_then_square(5))  # 输出:36

8. 使用柯里化创建自定义的操作符:

from functools import partial

def multiply(a, b):
    return a * b

double = partial(multiply, b=2)
triple = partial(multiply, b=3)

print(double(5))  # 输出:10
print(triple(5))  # 输出:15

9. 使用柯里化创建缓存函数:

from functools import partial

def cache(func):
    memo = {}

    def wrapper(*args):
        if args not in memo:
            memo[args] = func(*args)
        return memo[args]

    return wrapper

@cache
def fibonacci(n):
    if n <= 1:
        return n
    return fibonacci(n-1) + fibonacci(n-2)

print(fibonacci(10))  # 输出:55

10. 使用柯里化创建可复用的验证函数:

from functools import partial

def validate(func, condition):
    def wrapper(*args):
        if condition(*args):
            return func(*args)
        else:
            raise ValueError("Validation failed")

    return wrapper

def is_positive(x):
    return x > 0

positive_add = partial(validate, condition=is_positive)(add)

print(positive_add(2, 3))  # 输出:5
print(positive_add(-1, 3))  # 抛出 ValueError 异常

题外话

当下这个大数据时代不掌握一门编程语言怎么跟的上脚本呢?当下最火的编程语言Python前景一片光明!如果你也想跟上时代提升自己那么请看一下.

在这里插入图片描述

感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述
若有侵权,请联系删除
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值