python偏函数

本文介绍了Python中的偏函数应用,通过案例展示了如何使用偏函数重构特定领域表达式,创建伪对象继承结构,提高代码可读性和简洁性。通过逐步重构,将复杂的正则表达式转换为描述性函数,以及构建小型的伪类继承关系,揭示了偏函数在函数式编程中的价值。
摘要由CSDN通过智能技术生成

什么是偏函数

偏函数应用(Partial Function Application)听起来名字就很吸引人;它的作用是在函数调用前,预先固定参数的方法。它的机制有点粗糙,学术的解释有点古板,但是它很有用。如果你的函数需要 xy 两个参数,实现把 x 参数固定了,后续调用只需要传入 y 即可,来看一个例子:

# -*- coding: utf-8 -*-

import functools

def adder(x, y):
    return x + y

# 执行它
assert adder(1, 1) == 2
assert adder(5, 5) == 10
assert adder(6, 2) == 8

# 把 y 的参数固定
add_five = functools.partial(adder, y=5)

# 现在 加上 5
# x =1, y =5
assert add_five(1) == 6
# x =5, y =5
assert add_five(5) == 10
# x =2, y =5
assert add_five(2) == 7

坦白说,这个例子并没什么用处,但也不是一无是处。至少它很好展示了偏函数应用的用法。但是并没有告诉你为什么要用它,或者哪里能使用它。当你开始使用函数开始编写程序的时候,你很难从这个例子来想象他的使用场景。

这就是我为什么写这篇博客原因。我想要尝试不一样的方式。因为其他人已经把偏函数应用的实现机制都写烂了,我将跳过这个部分,旨在阐述它的应用场景。我们通过案例学习;每个案例的讲解都会通过逐步重构来有效应用偏函数。

案例1 - 重构特定领域表达式

我经常使用编写任务匹配的应用;如追踪 URL,查找制定循环,在日志文件中寻找模式。这类的任务,会慢慢变的臃肿,最终会失去控制。

导致这个问题的罪魁祸首就是正则表达式。没有任何的警惕,给予足够的时间,和不断增多的 “呃,你还能找到。。。” 方式请求,它很快就让你陷入不可维护代码的深坑。比如:

for text in lines:
    if re.search([a-zA-Z]\=, text):
        some_action(text)
    elif re.search([a-zA-Z]\s\=, text):
        some_other_action(text)
    else:
        some_default_action()

当我们需要快速实现的时候,这样看起来没什么问题。然后,几周之后再来看这段代码,我已经看不懂这代码中正则表达式的含义了。因此,是时候开始重构了。第一步就是拨出不合理的部分,利用良好命名的函数来替换我们的正则表达式:

def is_grouped_together(text):
    return re.search("[a-zA-Z]\s\=", text)

def is_spaced_apart(text):
    return re.search(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值