Python AND运算符的实际示例

时间:2016-02-26 16:37:57

标签: python boolean

Python为所有对象提供Truth Value Testing功能。这使Boolean Operators更符合所有对象的通用定义:

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

我见过OR运算符的实际用例,例如:

ENV_VAR = os.environ.get(‘ENV_VAR’) or <default_value>

但是,我没有看到任何使用Python AND运算符的实际示例。在这里,我正在寻找AND运算符的示例,它利用了真值测试,就像上面的OR运算符示例一样。

5 个答案:

答案 0 :(得分:1)

到目前为止,python中and的最常见用途只是检查多个条件:

if 13 <= age <= 19 and gender == 'female':
    print "it's a teenage girl"

and的使用案例利用了x and y返回其中一个操作数而不是返回一个布尔值的可疑事实,这些事实很少见。几乎总是有一种更清晰,更易读的方法来实现相同的逻辑。

在较旧的python代码中,您经常可以找到下面的构造,这是一个错误的尝试来复制C的三元运算符(cond ? : x : y)的行为。

cond and x or y

它有一个缺陷:如果x0None''或任何类型的假值,则会选择y,所以它不完全等同于C版本。

以下是“固定”版本:

(cond and [x] or [y])[0]

由于python引入了conditional expression,这些和/或黑客现在已经过时了。

x if cond else y

答案 1 :(得分:0)

示例中使用的功能

os.environ.get(‘ENV_VAR’) or <default_value>

称为短路评估。如果AND和OR的这一方面是您的问题的主题,您可能会发现这篇维基百科文章很有用:

https://en.wikipedia.org/wiki/Short-circuit_evaluation

答案 2 :(得分:0)

我在这个答案中找到了andor运算符的很好的示例:https://stackoverflow.com/a/28321263/5050657

直接引用答案:

  

Python的or运算符返回第一个Truth-y值或最后一个值,然后停止。这对于需要 后备 值的常见编程分配非常有用。

     

就像这个简单的:

print my_list or "no values"
     

...

     

当您需要 后卫 and的赞美。 >而不是后备。

     

喜欢这个:

my_list and my_list.pop()

答案 3 :(得分:0)

当我需要获取对象的属性时,我有时会使用and,如果它不是None,否则会获得None

>>> import re

>>> match = re.search(r'\w(\d+)', 'test123')

>>> number = match and match.group(1)

>>> number
>>> '123'

>>> match = re.search(r'\w(\d+)', 'test')

>>> number = match and match.group(1)

>>> number

答案 4 :(得分:-1)

任何时候你需要一个声明,其中两件事应该是真的。例如:

# you want to see only odd numbers that are in both lists
list1 = [1,5,7,6,4,9,13,519231]
list2 = [55,9,3,20,18,7,519231]
oddNumsInBothLists = [element for element in set(list1) if element in set(list2) and element % 2]
# => oddNumsInBothLists = [7, 9, 519231]

布尔运算符,尤其是和,通常可以省略,但会牺牲可读性。当且仅当所有成员都为真时,内置函数all()才会返回true。同样,如果函数any()的任何成员为真,则函数shouldBeTrue = [foo() for foo in listOfFunctions] if all(shouldBeTrue): print("Success") else: print("Fail") 将返回true。

or

考虑它的一种更简单的方法可能是and将用于代替连续的if语句,而def foobar(foo, bar): if(foo): return foo if(bar): return bar return False 将用于代替嵌套的if语句。

def foobar(foo, bar):
    return foo or bar

在功能上与:

相同
def foobar(foo, bar):
    if(foo):
        if(bar):
            return bar
    return False

def foobar(foo, bar):
    return foo and bar

在功能上与:

相同
class Foo:
    def __init__(self, name):
        self.name = name

test1 = Foo("foo")
test2 = Foo("bar")

print((test1 or test2).name) # => foo
print((test1 and test2).name) # => bar
print((not test1 and not test2).name) # => AttributeError for 'bool' (False)

这可以通过简单的测试来证明。

Trans. ID        QTY      TOOL   Date
    1            20        A2    2015
    2            20        A2    2016
    3            20        A2    2016
    4            20        A3    2015
    5            20        A3    2016
    6            20        A3    2016
    7            20        C     2016
    8            20        C     2016
    9            20        C     2016
    10           20        C     2016