假设我定义了以下变量:
mode = "access"
allowed_modes = ["access", "read", "write"]
我目前有一个类型检查语句是
assert any(mode == allowed_mode for allowed_mode in allowed_modes)
但是,似乎我可以简单地将其替换为
assert mode in allowed_modes
根据 ThiefMaster在 Python List Class __contains__ Method Functionality 中的回答,这两个应该是等价的。真的是这样吗?我如何通过查找 Python 的源代码轻松验证这一点?
最佳答案
不,它们不等同。例如:
>>> mode = float('nan')
>>> allowed_modes = [mode]
>>> any(mode == allowed_mode for allowed_mode in allowed_modes)
False
>>> mode in allowed_modes
True
参见 Membership test operations有关更多详细信息,包括此声明:
For container types such as list, tuple, set, frozenset, dict, or collections.deque, the expression
x in y
is equivalent toany(x is e or x == e for e in y)
.
关于python - Python中list类的__contains__方法是如何实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41956806/