【发布时间】:2012-12-10 17:25:08
【问题描述】:
这和我想的一样吗?在我看来,是的。我要求确定。
if n[i] == n[i+1] == n[i+2]:
return True
这些相等吗?
if n[i] == n[i+1] and n[i+1] == n[i+2]:
return True
【问题讨论】:
标签: python
这和我想的一样吗?在我看来,是的。我要求确定。
if n[i] == n[i+1] == n[i+2]:
return True
这些相等吗?
if n[i] == n[i+1] and n[i+1] == n[i+2]:
return True
【问题讨论】:
标签: python
它等价 到但不等于,因为访问只执行一次。 Python 自然地链接关系运算符(包括in 和is)。
显示细微差别的最简单方法:
>>> print(1) == print(2) == print(3)
1
2
3
True
>>> print(1) == print(2) and print(2) == print(3)
1
2
2
3
True
print()总是返回None,所以我们这里只是比较Nones,所以结果总是True,但是注意第二种情况,print(2)被调用了两次,所以我们在输出中得到两个2s,而在第一种情况下,结果用于两个比较,所以它只执行一次。
如果你使用没有副作用的纯函数,这两个操作最终会完全一样,但除此之外它们会有些不同。
【讨论】:
n 是一个在访问后更改 n[i+1] 值的对象)。编辑:我在一个示例中进行了编辑以显示差异。
2两次。为了清楚起见,我添加了更多解释。
是的,但是,当比较被链接时,通用表达式被评估一次,当使用and 时,它被评估两次。在这两种情况下,如果第一个比较为假,则不会评估第二个比较,例如来自docs:
比较可以任意链接,例如,x
【讨论】:
正如其他人的回答,答案是肯定的。但是:小心添加括号。例如:
>>> 1 == 2 == 0
False
>>> (1 == 2) == 0
True
在第二种情况下,(1 == 2) 计算结果为 False,然后 False == 0 计算结果为 True,因为 Python 允许将布尔值与整数进行比较。
同样:
>>> 0 == 0 == 1
False
>>> (0 == 0) == 1
True
【讨论】:
是的,你是对的......
你也可以这样做
5 > x > 1
或
1 < x < 5
【讨论】:
你可以使用集合来测试是否相等
>>> a, b, c = 2, 2, 2
>>> len({a, b, c}) == 1
True
>>> a, b, c = 2, 2, 3
>>> len({a, b, c}) == 1
False
【讨论】:
是的,在 python 的内部,比较运算符既不返回 true 也不返回 false,而是返回“比较结果”对象(不记得类名,这是过去的事了),并且这个对象提供了 _ lt_、_gt_、_eq_等等方法并对最终结果“负责”(并且“比较结果”在语句结束时转换为 True 或 False)。这是 python 提供给你的语义控制的魔力:)
【讨论】:
看来你也可以用 !=: 链接 ==:
>>> a = b = c = 1
>>> a == b == c
True
>>> a == b == c == 1
True
>>> a == b == c == 2
False
>>> a == b == c != 2
True
>>> a == b == c != 1
False
>>>
【讨论】: