我最近发现了这部分代码: filteredImage = image > filters.threshold_otsu(image)
在大多数语言中image > filters.threshold_otsu(image)
会返回true
或false
。在这种情况下filteredImage
是ndarray
。那么这段代码究竟发生了什么?
Python 允许运算符重载。所以你最好查阅你的特定用例的文档 - 这里它是一个布尔掩码,正如评论所指出的那样,但 python 允许你使用任何运算符来做你喜欢的几乎任何事情。
例如,>
如果您实现了自己的数组类,您可以有一个类来决定一个数组是否比另一个数组长。最好的办法是搜索特定用例的文档并寻找运算符。
想象一下,我创建了一个名为 train 的类,它只有一根绳子,我想用>
它把两列火车粘在一起。(看起来这样做会很好:P)
class Train:
def __init__(self, cargo):
self.cargo = cargo
def __call__(self):
print("__{0}__".format(self.cargo))
def __gt__(self, another):
self.cargo = "{0}__{1}".format(self.cargo, another.cargo)
# Make two trains
a = Train("check")
b = Train("me")
a()
b()
# Join the trains and print again
a > b
a()
b()
哪个会输出
__check__
__me__
__check__me__
__me__
请注意,我没有使用 this 来返回 true 或 false,我什至没有让操作符返回任何内容。在我提供的任何文档中记录这一点对我来说很重要,以告诉您我的>
符号的预期用例是我的班级。
这是一个非常有用的功能,一直在使用(例如,numpy 库中的乘法——python 本身不能乘以 numpy.arrays)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句