python - Or | 的奇怪行为 运算符和非
问题描述
也许这是一个非常基本的问题,但对我来说没有任何意义。
如果我做:
In: not(False),(not(False))
Out: (True,True)
所以,基本的逻辑运算True Or True
就是永远True
。
但如果我这样做:
not(False)|(not(False))
Out: False
如果我对第一个条件使用括号:
In: (not(False))|(not(False))
Out: True
如果我使用 Or 而不是 |:
In: not(False)or(not(False))
Out: True
是否应该表现得像这样?如果是这样,为什么?
解决方案
not
不是函数;它是一个一元运算符,其优先级低于|
.
not(False)|(not(False))
== not False | (not False) drop (...) around literal False
== not (False | (not False) add (...) implied by operator precedence
== not (False | True) evaluate ``not False``
== not True evaluate ``False | True``
== False evaluate ``not True``
但not
它的优先级高于or
,这是您应该使用的运算符。
not(False)or(not(False)) == not False or (not False)
== (not False) or (not False)
== True or True
== True
该文档按优先级从低到高提供了可用运算符的完整列表。
推荐阅读
- c++ - 如何在 Node N-API 中使用第三方 dll、头文件和 lib 文件
- paypal - 使用 java SDK 的 Paypal ExpressCheckout 重试后失败,但向客户收费
- python - 如何在侧面输出中显示python输入代码
- java - 在 Spring 配置或测试中排除或取消 bean
- nginx - Openresty LUA Mysql连接错误
- web - Primeface 6.2 / Java --> 推送功能 / 更新(xhtml 组件)
- excel - 使用 DoCmd.TransferSpreadsheet 将特定列导出到 Excel 工作表
- php - 为什么 pcntl_fork 返回的进程 ID 与实际运行的进程 ID 不同?
- c# - 从asp.net核心资源中读取嵌入文件
- python - Django prefetch_related 与 FK 进入视图