python - 变量python中的逻辑运算符'or'和'and'
问题描述
是否可以将变量分配给逻辑“与”或“或”的值?并在比较表达式中使用它们?
logical_obj = bool()
if True:
logical_odj = or
else:
logical_obj = and
if 1 + 2 == 3 logical_obj 3 + 1 == 5:
pass
解决方案
and
andor
是运算符,例如+
and -
,并且不能分配给变量。与+
et al. 不同,由于短路,没有实现它们的函数:a and b
仅评估b
if 是否a
具有真值,而foo(a, b)
必须同时评估a
和b
beforefoo
被调用。
最接近的等价物是any
andall
函数,一旦在其参数中分别找到真值或假值,它们就会返回真值。
>>> any([1+2==3, 3+1==5]) # Only needs the first element of the list
True
>>> all([3+1==5, 1+2==3]) # Only needs the first element of the list
False
由于这些是普通函数,您可以将它们绑定到变量。
if True:
logical_obj = any
else:
logical_obj = all
if logical_obj([1 + 2 == 3, 3 + 1 == 5]):
pass
在调用函数之前,必须对列表进行完全评估,但如果迭代是延迟生成的,则可以防止表达式在必要时被评估:
>>> def values():
... yield 1 + 2 == 3
... print("Not reached by any()")
... yield 3 + 1 == 5
... print("Not reached by all()")
...
>>> any(values())
True
>>> all(values())
Not reached by any()
False
推荐阅读
- django - django-allauth 和 docker 闪烁的 Facebook 登录弹出窗口
- dart - 使用偏移量的容器动画 - Flutter
- c# - WPF 使用重置对 DataGrid 进行排序
- ibm-watson - IBM Chatbot 助手的覆盖日志 URL 是什么?
- node.js - 使用 NGINX 和 Nodejs 反向代理服务快速动态 URL
- pandas - 使用 pip 安装程序的 pandas 安装错误
- unity3d - 无法统一构建:“UnityEditor.BuildPlayerWindow+BuildMethodException:”
- c# - 如何在 asp.net 中设置反应环境?
- go - 在 Golang 中使用函数生成地图
- php - 在 php 中插入日期时添加 # 不起作用