Python中重载操作符实现管道操作

在LangChain创建一个chain的新方式是使用LCEL的表达式,例如

chain = prompt | model | output_parser

这样的代码又清晰又性感,特别是对于熟悉Linux管道(pipes)操作的同学来说太亲切了。那么如何在我们自己的Python代码中实现这种链式的管道操作呢?实际上,实现这样的功能并不复杂,让我们一起看看吧。

熟悉Python的同学们估计也猜到了,如同这一类魔法操作,常常是为自定义类型实现一些内建的特殊函数,例如__str__, __getitem__, __dict__等等操作。今天的主角是两个函数,__or__和__ror__。

在Python中,当解释器看到表达式

a | b

的时候,它会:

(1) 如果a对象的类实现了__or__则调用a.__or__, 传入的参数是b对象;

(2) 如果a没有实现__or__操作,而b实现了__ror__则调用b.__ror__, 传入的参数是a对象;

(3) 如果a和b都很乖,分别实现了两种操作符重载,那么按照优先级次序调用a.__or__,而b的方法会被忽略;

(4) 最后就是都不满足的情况那就不用说了,同学们自己试试。 

是不是很简单啊?接下来show time看几个简单例子加深印象。首先是一个看起来没什么用仔细看也的确没什么用的echo。

class Echo:
    def __ror__(self, value):
        return value


echo = Echo()
s = "hello" | echo
print("hello" | echo)
print( 1 + 1 | echo)

下面的例子是实现increase和s

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bruce Jia(上海)

熬夜码字换酒钱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值