【发布时间】:2013-11-12 16:42:17
【问题描述】:
我有以下功能:
def InRange(number):
return 5 <= number >= 1
如果使用链式比较,如果数字不在 1 到 5 的范围内,我希望这个判断为 false,但似乎无法做到这一点。
有什么建议吗?
【问题讨论】:
标签: python comparison chained
我有以下功能:
def InRange(number):
return 5 <= number >= 1
如果使用链式比较,如果数字不在 1 到 5 的范围内,我希望这个判断为 false,但似乎无法做到这一点。
有什么建议吗?
【问题讨论】:
标签: python comparison chained
你想要这样:
def InRange(number):
return 1 <= number <= 5
请注意,您也可以这样做:
def InRange(number):
return 0 < number < 6
【讨论】:
使用这个:
1 <= number <= 5
来自docs:
x < y <= z等价于x < y和y <= z,除了y是 只评估一次(但在这两种情况下,z在x < y被发现是假的)。
你的(不正确的)表达实际上等同于:
number >=5 and number >= 1
所以,对于 1 到无穷大之间的任何数字,它将是 True:
【讨论】:
True...
您也可以这样做(根据函数的名称,这似乎很合适):
def InRange(number):
return number in range(1, 6)
对于较大的数字,您应该使用:
def InRange(number):
return number in xrange(1, 10000000)
【讨论】:
10**6 in xrange(1, 10000000) 之类的东西大约需要 40 毫秒,而1 <= 10**6 <10000000 只需要 240 ns。所以,我总是更喜欢数学比较运算符。
10**6 in range(1, 10000000) 只采用了 1.41us。