我想知道是否有一种不太复杂的方法让x in y
在python 2.7中返回任意值(除了布尔值)。
__contains__
结果似乎被转换为布尔值,我也找不到使用__iter__
或__getitem__
的明显方法。这可以通过修改CPython来完成,但是如果可能的话我还想避开它; y
可能会像您想要的那样复杂。
我知道这是一个不好的做法,非pythonic,我想用它来做的可能会有所不同,这可能是危险的...这不是这个问题的重点,谢谢。
答案 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