破解运算符以返回非布尔值

时间:2014-06-20 12:58:29

标签: python python-2.7

我想知道是否有一种不太复杂的方法让x in y在python 2.7中返回任意值(除了布尔值)。

__contains__结果似乎被转换为布尔值,我也找不到使用__iter____getitem__的明显方法。这可以通过修改CPython来完成,但是如果可能的话我还想避开它; y可能会像您想要的那样复杂。

我知道这是一个不好的做法,非pythonic,我想用它来做的可能会有所不同,这可能是危险的...这不是这个问题的重点,谢谢。

2 个答案:

答案 0 :(得分:1)

虽然你可以从__contains__返回任何你想要的东西。但是,in运算符始终将该值转换为布尔值;这是hardcoded to return a boolean value

result = PyObject_IsTrue(res);

其中PyObject_IsTrue()以与bool() function相同的方式产生布尔值。

在这种情况下使用不同的运算符;可能会覆盖__rshift__以重载>>运算符:

x >> y

或只使用专用方法:

y.contains_with_probability(x)

答案 1 :(得分:-2)

我希望这会对你有所帮助:

x=2
y = [1,2,3,4,5]
print x if x in y else False