什么是:=运营商?

Col*_*son 10 syntax programming-languages operator-keyword colon-equals

在某些编程语言中,我看到(例如):

x := y
Run Code Online (Sandbox Code Playgroud)

这个:=操作员通常被称为什么,它做什么?

Mar*_*ers 16

这取决于语言.

  • 在大多数支持运算符的语言中,:=它意味着赋值.在这些语言中,:=运算符通常意味着相等比较.
  • =均值分配的语言中,=通常用于相等比较.

没有==意思:=

我记不起任何=与其相同的语言:=.


在MySQL中=,:=它们都用于赋值,但它们不可互换,选择正确的取决于上下文.为了使事情更加混乱,=操作员也用于比较.=作为任命或比较的解释也取决于背景.

  • 在 GoLang 中 := 允许您为变量赋值,并假设新变量继承了赋值所隐含的类型。 (3认同)
  • 由Wirth设计的Pascal和Modula-2使用':='作为赋值运算符. (2认同)
  • Algol 使用 `:=` 进行赋值。这在源自 Algol 的语言中趋于延续:Pascal、Modula-2 等。 (2认同)

小智 8

我通常在伪代码中看到更多,这意味着赋值。因此 x := y 表示“将 x 的值设置为 y 的值”,而 x = y 表示“x 的值是否等于 y 的值?”


Ale*_*x W 8

这是一个即将加入 Python 3.8 的新运算符,实际上在 BDFL Guido van Rossum 的提前退休中发挥了作用。

正式地,运算符允许所谓的“赋值表达式”。非正式地,操作员被称为“海象操作员”。

它允许赋值,同时也评估一个表达式。

所以这:

env_base = os.environ.get("PYTHONUSERBASE", None)
if env_base:
    return env_base
Run Code Online (Sandbox Code Playgroud)

可以缩短为:

if env_base := os.environ.get("PYTHONUSERBASE", None):
    return env_base
Run Code Online (Sandbox Code Playgroud)

https://www.python.org/dev/peps/pep-0572/#examples-from-the-python-standard-library


小智 5

该符号称为“becomes”,是在 IAL(后来称为 Algol 58)和 Algol 60 中引入的。它是为变量赋值的符号。读x := y;作“x 变成 y”。

使用“:=”而不是“=”进行赋值是数学上的严谨;从这种观点来看,“x = x + 1”是荒谬的。其他当代语言可能使用左箭头进行分配,但这在许多字符集中并不常见(作为单个字符)。

Algol 68进一步区分识别和分配;INT the answer = 42;表示“答案”被声明为等于 42(即,是一个常数值)。在INT the answer := 42;“答案”中,被声明为一个变量,并最初被赋予值 42。

还有其他赋值符号,例如+:=,发音为 plus-and-becomes;x +:= y将 y 添加到 x 的当前值,并将结果存储在 x 中。

(空格没有意义,因此可以插入“到”标识符中,而不必弄乱下划线)