我一直试图了解是否可以使用类似于我在下面演示的语句的 if 语句。我的理解是不是?
for i in range(10):
if i == (3 or 5) or math.sqrt(i) == (3 or 5):
numbers.append(i)
Run Code Online (Sandbox Code Playgroud)
使用这段代码,我只能得到数字3& 9,而我应该得到3, 5, 9. 是否有另一种方法可以不列出下面的代码?
for i in range(10):
if i == 3 or i == 5 or math.sqrt(i) == 3 or math.sqrt(i) == 5:
numbers.append(i)
Run Code Online (Sandbox Code Playgroud) 我在 Django 源代码中找到了以下行:
actions.extend(self.get_action(action) for action in self.actions or [])
Run Code Online (Sandbox Code Playgroud)
参数self.get_action(action) for action in self.actions or []必须是可迭代值的推导式,但我无法弄清楚该or []片段可能意味着什么。
没有if,所以or没有在布尔表达式中使用,这是我认为我在 Python 中熟悉的唯一用法。Web 搜索只返回布尔值or.
这是什么语法?
我在我的一个函数中发现了一个特定的错误,其中按位比较OR的args顺序似乎很重要:
In: None or False
Out: False
In: False or None
Out: None
Run Code Online (Sandbox Code Playgroud)
使用Python 2.7.2和IPython 0.10.2进行了检查.
我可以确保,如果一个元素为None,确保他是比较的第一个arg,就像这样
if a==None:
a or b
else:
b or a
Run Code Online (Sandbox Code Playgroud)
但有人可以解释一下为什么在OR比较中更改顺序会影响输出吗?这特别适用于Python吗?
谢谢.
22 and 333/12 or 1
Run Code Online (Sandbox Code Playgroud)
我遇到了上面的代码行.结果是27,但我不太明白在这种情况下的意义and和or含义.有人可以向我解释,首选的例子.提前致谢!!
我很好奇逻辑运算符如何在集合中工作。考虑到这一点:
x = set('abcde')
y = set('bdxyz')
# union
print(x | y) # output: {'d', 'b', 'y', 'e', 'z', 'x', 'c', 'a'}
print(x or y) # output: {'d', 'b', 'e', 'c', 'a'}
# intersection
print(x and y) # output: {'d', 'b', 'y', 'z', 'x'}
print(x & y) # output: {'b', 'd'}
Run Code Online (Sandbox Code Playgroud)
我希望联合和交集的输出对于每个都相同。他们怎么可能不是?谁能解释一下?
试图了解 AND 语句在abs(numbers)函数内部是如何工作的。
打电话 print(abs(21-22 and 9-4 and 11-8))
无论最后一个表达是什么,这总会给我。在这种情况下,它计算 11-8,所以它打印 3。为什么其他表达式不在输出中并且也没有错误?
[编辑:这个问题不是这个问题的重复;我问的是语言设计的问题,即为什么它首先是这样的。我对它的行为方式并不感到困惑,我对为什么首先决定这种行为感到困惑。]
在Python(以及其他一些语言,例如Lua)中,布尔运算符and和or并不像人们所期望的那样返回布尔值True,False而是:
x or y:如果x为假,则y,否则xx and y如果x为 false,则x,否则y很容易看出,在x和y是布尔值的特殊情况下,其行为符合预期。
我的问题是,以这种方式进行概括的实际理由是什么?我知道你可以用它来实现以下技巧:
foo = x or None
Run Code Online (Sandbox Code Playgroud)
或者 DIY 三元运算符,例如:
foo = x and y or z
Run Code Online (Sandbox Code Playgroud)
但我觉得这些都不足以为这种令人惊讶的行为提供充分的理由。每当我看到非布尔返回值被依赖于其实际值(而不是在 if 语句或其他东西中,无论哪种方式都无关紧要),我总是必须仔细检查我对它的理解,因为我总是忘记它是如何工作的,我需要再次查找它。我通常更喜欢以更详细的方式编写。是否有一个根本原因为什么它应该以这种方式工作,或者它真的只是为了技巧?