注册
登录
新闻动态
其他科技
返回
Python中的中缀运算符
作者:
糖果
发布时间:
2024-04-21 11:21:20 (3天前)
来源:
http://tomerfiliba.com/blog/Infix-Operators/
您可能已经知道,有 3 种运算符调用符号:前缀( + 3 5)、中 缀( 3 + 5) 和后缀( 3 5 +)。前缀(以及后缀)运算符在 LISP/Scheme 等语言中使用,并且具有不需要括号的良好特性——只有一种方法可以读取类似 的表达式3 5 + 2 *,而不像3 + 5 * 2. 另一方面,它降低了代码的可读性以及运算符及其参数的局部性。这就是我们都喜欢中缀运算符的原因。 ![](/user/files/p_TsaAtXHkRTux0YwzSAm1kP8zcop6FsJSkn2YSaeaA.png) 现在想象一下,我有一个函数 , add(x,y),并且我有一个类似add(add(add(5,6),7),8)... 如果我可以在这里使用中缀符号不是很酷吗?遗憾的是,Python 不允许您定义新的运算符或更改函数获取参数的方式……但这并不意味着我们必须放弃! 例如,Haskell 允许您定义自定义运算符并设置它们的优先级,以及调用“普通”函数作为中缀运算符。假设你有一个函数——你可以像orf(x,y)一样调用它(使用反引号)。这使我们可以将之前的表达式 ,转换为, 更具可读性。但是我们如何在 Python 中做到这一点呢?f 5 65 `f` 6add(add(add(5,6),7),8)5 `add` 6 `add` 7 `add` 8 嗯,有这个 食谱食谱 它提供了一种在 Python 中实现相同功能的非常好的方法(我稍作修改): from functools import partial class Infix(object): def __init__(self, func): self.func = func def __or__(self, other): return self.func(other) def __ror__(self, other): return Infix(partial(self.func, other)) def __call__(self, v1, v2): return self.func(v1, v2) 使用这个特殊类的实例,我们现在可以使用新的“语法”来调用函数作为中缀运算符: >>> @Infix ... def add(x, y): ... return x + y ... >>> 5 |add| 6 11 用管道(按位或)包围装饰函数允许它们以中缀方式获取参数。使用它,我们可以做各种很酷的事情: >>> instanceof = Infix(isinstance) >>> >>> if 5 |instanceof| int: ... print "yes" ... yes 乃至 咖喱 职能: >>> curry = Infix(partial) >>> >>> def f(x, y, z): ... return x + y + z ... >>> f |curry| 3
>>> g = f |curry| 3 |curry| 4 |curry| 5 >>> g() 12 那不是很酷吗?
收藏
举报
1 条回复
动动手指,沙发就是你的了!
登录
后才能参与评论