【问题标题】:Can someone explain why this compiles? [duplicate]有人可以解释为什么会编译吗? [复制]
【发布时间】:2019-10-28 04:13:55
【问题描述】:

我是 Python 的新手,正在试验并运行以下代码:

a=13
a==14
print(a)

由于第二行,我预计程序不会编译,尽管令人惊讶的是它确实如此(尽管我看不到它所做的任何更改)。有人可以解释为什么吗?如果我使用a===14 而不是a==14,则会出现错误。

【问题讨论】:

  • 实际代码是a=13(换行)a==14(换行)print(a)
  • 为什么== 无效?在 REPL 中,它将打印一个布尔值以进行相等检查。在脚本中,它仍然执行相等性检查,但只是丢弃结果。 = 是一个赋值,== 检查值是否相等
  • a==4 是一个有效的 Python 表达式。它评估为真或假。
  • 谢谢 roganjosh 和 khelwood 我明白了
  • 因为==是比较运算符...

标签: python python-3.x variable-assignment assignment-operator


【解决方案1】:

a==14 不是语句,而是表达式。它产生一个布尔结果,一旦产生就会被丢弃。这是对程序完全没有影响的一行。

另一方面,python 中没有 === 运算符,这就是你的程序在这种情况下失败的原因。与 javascript 不同,python 是一种强类型语言,它不进行隐式转换。 python的==类似于javascript中的===

【讨论】:

  • 严格来说,它一个陈述。这是一个表达式语句。请参阅grammar 中的expr_stmt
【解决方案2】:

a = 13 将值 13 赋给 a。

a==14 比较 a 和 14 并返回 false 因为 13 != 14

所以 a==14 是有效的

【讨论】:

    【解决方案3】:

    这里 a=13 会将值 13 赋给变量 a

    a==14 会检查 a 的值是否为 14

    a===13 会报错,因为没有运营商===

    排序。 = 运算符赋值,== 比较和=== 没有这样的运算符

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 2017-10-03
      • 1970-01-01
      • 2019-07-06
      • 2016-05-10
      相关资源
      最近更新 更多