首页 > 解决方案 > 变量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

标签: python

解决方案


andandor是运算符,例如+and -,并且不能分配给变量。与+et al. 不同,由于短路,没有实现它们的函数:a and b仅评估bif 是否a具有真值,而foo(a, b)必须同时评估abbeforefoo被调用。

最接近的等价物是anyandall函数,一旦在其参数中分别找到真值或假值,它们就会返回真值。

>>> 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

推荐阅读