相关疑难解决方法(0)

将变量与多个值进行比较的简洁方法

我一直试图了解是否可以使用类似于我在下面演示的语句的 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)

python if-statement

2
推荐指数
1
解决办法
80
查看次数

Python 列表推导式中的“或”是什么意思?

我在 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.

这是什么语法?

python

2
推荐指数
1
解决办法
51
查看次数

OR运算符比较None和bool

我在我的一个函数中发现了一个特定的错误,其中按位比较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吗?

谢谢.

python

1
推荐指数
1
解决办法
122
查看次数

'和'和'或'如何在Python中使用非布尔值?

22 and 333/12 or 1
Run Code Online (Sandbox Code Playgroud)

我遇到了上面的代码行.结果是27,但我不太明白在这种情况下的意义andor含义.有人可以向我解释,首选的例子.提前致谢!!

python syntax

0
推荐指数
2
解决办法
879
查看次数

python集合中的逻辑运算符

我很好奇逻辑运算符如何在集合中工作。考虑到这一点:

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)

我希望联合和交集的输出对于每个都相同。他们怎么可能不是?谁能解释一下?

python set

0
推荐指数
1
解决办法
739
查看次数

在 Python 中的 abs(number) 中使用 AND

试图了解 AND 语句在abs(numbers)函数内部是如何工作的。

打电话 print(abs(21-22 and 9-4 and 11-8))

无论最后一个表达是什么,这总会给我。在这种情况下,它计算 11-8,所以它打印 3。为什么其他表达式不在输出中并且也没有错误?

python

0
推荐指数
1
解决办法
57
查看次数

Python:布尔运算符(和、或)不返回布尔值的理由

[编辑:这个问题不是这个问题的重复;我问的是语言设计的问题,即为什么它首先是这样的。我对它的行为方式并不感到困惑,我对为什么首先决定这种行为感到困惑。]

在Python(以及其他一些语言,例如Lua)中,布尔运算符andor并不像人们所期望的那样返回布尔值TrueFalse而是:

  • x or y:如果x为假,则y,否则x
  • x and y如果x为 false,则x,否则y

很容易看出,在xy是布尔值的特殊情况下,其行为符合预期。

我的问题是,以这种方式进行概括的实际理由是什么?我知道你可以用它来实现以下技巧:

foo = x or None
Run Code Online (Sandbox Code Playgroud)

或者 DIY 三元运算符,例如:

foo = x and y or z
Run Code Online (Sandbox Code Playgroud)

但我觉得这些都不足以为这种令人惊讶的行为提供充分的理由。每当我看到非布尔返回值被依赖于其实际值(而不是在 if 语句或其他东西中,无论哪种方式都无关紧要),我总是必须仔细检查我对它的理解,因为我总是忘记它是如何工作的,我需要再次查找它。我通常更喜欢以更详细的方式编写。是否有一个根本原因为什么它应该以这种方式工作,或者它真的只是为了技巧?

python boolean language-design comparison-operators

0
推荐指数
1
解决办法
772
查看次数