什么是 := 操作符?

27

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

x := y

这个 := 运算符通常被称为什么,它是用来做什么的?


1
你漏掉了“::=”。它出现在语言语法中,表示“被定义为等于”。 - user207421
7个回答

33

在所有支持运算符:=的语言中,它表示赋值操作。

  • 在支持运算符:=的语言中,=运算符通常表示相等比较。
  • 对于将=表示为赋值操作的语言来说,通常使用==进行相等比较。

:=是不是意味着=

我不记得有任何一种语言中:==的含义是相同的。


在MySQL中,:==都用于赋值操作,但它们不是可互换的,选择正确的操作符取决于上下文。更令人困惑的是,=运算符也用于比较操作。将=解释为赋值还是比较也取决于上下文。


3
Pascal和Modula-2都是由Wirth设计的,使用":="作为赋值运算符。 - Eight-Bit Guru
3
Algol使用:=表示赋值,这种语法在后来的编程语言中得以延续,例如Pascal、Modula-2等。 - rossum
4
在 Go 语言中,:= 允许你给一个变量赋值,并假设新变量继承了被赋值的类型。 - Stephen
在R中,:=有时会被特定领域语言的包使用。例如,在tidyverse和data.table中,用于赋值(通常在数据框环境中,并且在某些情况下,使用=进行赋值不合适)。链接:https://dev59.com/WFwY5IYBdhLWcg3w5rWq 和 https://www.rdocumentation.org/packages/rlang/versions/0.0.0.9000/topics/op-colon-equals#:~:text=The%20colon%2Dequals%20operator%20is,for%20computing%20on%20the%20language. - Bryan Shalloway

19

这是一个即将在Python 3.8中推出的新操作符,实际上在BDFL Guido van Rossum早期退休中扮演了一个角色。

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

它允许在评估表达式的同时进行赋值。

因此,这个:

env_base = os.environ.get("PYTHONUSERBASE", None)
if env_base:
    return env_base

可以简化为:

if env_base := os.environ.get("PYTHONUSERBASE", None):
    return env_base

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


10

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


5
该符号被称为“变成”,并在IAL(后来称为Algol 58)和Algol 60中引入。它是将值赋给变量的符号。读作“x变成y”。使用“:=”而不是“=”进行赋值是数学上的一种细节; 对于这种观点,“x = x + 1”是无意义的。其他现代语言可能会使用左箭头进行赋值,但是许多字符集中通常不使用(作为单个字符)。 Algol 68进一步区分了标识和赋值; INT the answer = 42;表示“答案”被声明为等于42(即一个常量值)。在INT the answer:= 42;中,“答案”被声明为变量,并最初被赋予值42。还有其他赋值符号,例如+:= ,发音为“加并变成”; x +:= y将y添加到x的当前值中,并将结果存储在x中。(空格没有意义,因此可以将其插入“into”标识符中,而无需处理下划线)

1
很多编程语言使用共同的运算符。通常情况下,= 用于变量赋值,如果单独出现,不应该被视为数学上的等号。在一些编程语言中,如Java和Bash,相等性是通过 == 进行测试的。

1

PL/I有=:=两种赋值符号。 =用于赋值和比较 - 编译器会根据上下文尝试确定你的意图。如果编译器错误地将赋值解释为比较,你可以使用:=来强制执行赋值。

例如,考虑x=y=0;在C语言中(举个例子),这意味着“将0分配给y,然后将该结果(也是0)分配给x。”

在PL/I中,它的意思是将y与0进行比较,然后将该比较的布尔结果分配给x(即相当于在类似C的语言中使用x = y == 0;)。如果你(与PL/I的设计者不同,理智地)想要将其解释为“将0分配给x和y”,你应该使用x = y := 0;(或x := y := 0;)。


0

:= 表示“设置为相等” 一个具有语法的赋值

v := expr 将变量«v»的值设置为从表达式«expr»获得的值。

例子: X := B 将 X 的定义设置为 B 的值


2
欢迎来到 Stack Overflow。虽然我们很感谢您的贡献,但在这种情况下,我真的看不出您对现有答案所提供的信息有什么补充。 - Adrian Mole

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接