【发布时间】:2018-03-09 22:04:05
【问题描述】:
我已经查看了堆栈溢出答案以解决与我的问题类似的问题,但我没有找到可以解决我的问题(here 和 here)或以一种让我清楚的方式解释的答案。为了理解,我做了如下实验:
def Even1(num): # I understand this and use it
if num % 2 == 0:
return num
def Even2(num):
return not (num & 1)
def Even3(num):
return not (num and 1)
filter(Even1, range(7)) ==> [2, 4, 6]
filter(Even2, range(7)) ==> [0, 2, 4, 6]
filter(Even3, range(7)) ==> [0]
1: not (4 & 1) = True
2: not (1 & 4) = True
3: not (4 & 2) = True
4: not (3 & 4) = True
5: not (4 & 3) = True
6: not (4 & 4) = False
7: not (3 & 1) = False
8: not (1 & 3) = False
9: not (3 & 2) = False
10: not (2 & 3) = False
11: not (3 & 3) = False
基于#1 到#5,我认为not (x & y) 排列中的任何偶数与任何其他数字的计算结果为 False(由 not 更改为 True)。我认为这与bin(x) 的事实有关,其中x 偶数以0 结尾,而奇数以1 结尾。所以也许not 检查最后一位。但是#6 反驳了这个假设。以及数字的显示顺序
没有影响。
表达式 #6 与表达式 #11 有什么共同点,除了每个表达式都计算相同/相等的数字?
根据 #7 到 #11,它看起来像 not (x & y) 中的奇数,其中 x 和 y 的奇数计算结果为 True(由 not 更改为 False)。那会是正确的吗?
最后,Even2 和 Even3:将 & 替换为 and。我知道第一个是按位的,第二个是逻辑的,但这意味着什么,所以我以结果结束。
【问题讨论】:
标签: python