【问题标题】:Why does Python allow the use of 'and' while storing a variable? [duplicate]为什么 Python 在存储变量时允许使用“和”? [复制]
【发布时间】:2021-04-15 02:08:20
【问题描述】:

我在某处看到一个变量存储在两个变量之间,and。你知道这样做的目的吗?它似乎只将第二个值存储为变量,即使第二个值为None

y = 5 and 7
print(y)

7


h = None
y = 5 and h

None  

这样做有什么目的吗?我想知道为什么它不只是抛出一个错误,因为第一个值似乎总是被忽略。 不是重复的问题,因为没有关于以这种方式存储变量的问题,而且我的措辞与假设的重复完全不同。 Stack Overflow 的创始人说过,即使问题是重复的,如果措辞不同,它也不是重复的,因为有些问题必须用不同的措辞才能让更多人找到他们正在寻找的答案。假设重复根本不问或回答我的问题。

【问题讨论】:

  • 试试None and 5
  • 为什么会抛出错误,x and y 是一个有效的表达式。 and 如果抛出错误将毫无用处
  • 为什么不呢?这是一个有效的表达式,您可以在赋值语句中使用结果。
  • 有人将此标记为重复,但据称它是重复的问题与我的问题几乎没有相似之处,我猜我没有追索权?对于 Q 上回答的任何人以及将来寻找答案的任何人来说,这都是对 StackOverflow 的伤害。我曾领导 SO CEO 在采访中说,改写的问题不是重复的,我的问题不仅仅是改写,因为它专门针对变量。我什至看不出是谁对我的问题做了这个。

标签: python variables


【解决方案1】:

赋值的右边是一个表达式。它可以是任何合法的表达方式。

5 and 7 在 Python 中到处都是合法表达式,为什么它不是赋值右侧的合法表达式?这将是一个奇怪的规则例外,规则的例外是不好的,因为它们使语言更难学习。

换句话说:

这是合法的:

print(5 and 7)

所以,从逻辑上讲,这也应该是合法的:

y = 5 and 7
print(y)

其他一切都会令人困惑。

【讨论】:

    【解决方案2】:

    似乎只将第二个值存储为变量,即使第二个值为None

    尝试False作为第一个操作数:

    False and True
    # False
    

    a and b 是执行 short-circuit conjunctionregular Python expressionregular Python expression。它大部分在布尔上下文中很有用(如上所述),但是没有理由 Python 应该任意不允许它用于布尔值以外的类型的赋值:

    a = None and 'hello'
    # a is None.
    

    【讨论】:

    • 好的,那么第一个值的存在或不存在是 Bool 吗?有道理。
    • @grissler “所以第一个值的存在或不存在是一个布尔值”不,它不是。 Read this relevant section of the docs
    • @juanpa.arrivillaga 文档说x and y: if x is false, then x, else y 我不明白如果 x 为假,变量如何等于 x。我了解and 通常是如何工作的,只是在这种定义变量的情况下不了解。
    • @grissler 定义变量是无关紧要的。它的工作原理与x and y 相同。 x 不为假。在真值测试中,所有对象都有一个“真值”,即“真实性”。它们表现为真或假,但它们不是TrueFalse
    • @juanpa.arrivillaga 在这种使用中,当它被存储为变量时,除了最后一个元素之外的所有元素都可以用作布尔值吗?
    猜你喜欢
    • 2020-11-22
    • 1970-01-01
    • 2014-02-17
    • 1970-01-01
    • 1970-01-01
    • 2013-08-22
    • 1970-01-01
    • 2020-06-15
    • 1970-01-01
    相关资源
    最近更新 更多