在某些编程语言中,我看到(例如):
x := y
这个:=
运营商通常被称为什么,它做什么?
在支持运营商:=
的所有语言中,它意味着分配。
:=
的语言中,=
运算符通常意味着相等比较。=
表示赋值的语言中,==
通常用于相等比较。
:=
是否意味着=
?
我记不起任何语言:=
与=
相同。
在MySQL中,:=
和=
都用于assignment,但它们不可互换,选择正确的取决于上下文。为了使问题更加混乱,=
算子也被用于comparison。 =
作为转让或比较的解释也取决于背景。
我通常在伪代码中看到它更多,这意味着一个任务。因此,x:= y表示'将x的值设置为y'的值,而x = y表示'x的值是否等于y的值?'
很多语言都使用普通运算符。通常,=
保留用于变量赋值,如果它是单独的,则不应在数学上下文中查看。尽管==
测试了Java和Bash等一些语言的平等性
PL /我有(有吗?)=
和:=
。 =
用于赋值和比较 - 编译器试图根据上下文找出你的意思。当/如果它决定进行比较,你真正意味着分配,你可以使用:=
强制分配。
例如,考虑q中的x=y=0;
(对于一个例子),这将意味着“将0分配给y,然后将结果(也是0)分配给x”。
在PL / I中,它意味着将y与0进行比较,然后将该比较的布尔结果分配给x(即,等同于C中的x = y == 0;
)。如果你(理智,不像PL / I的设计者)意图“将0分配给x和y”,你就会使用x = y := 0;
(或x := y := 0;
)。
该符号称为“成为”,并随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-become; x +:= y
将y添加到x的当前值,将结果存储在x中。
(空格没有意义,所以可以插入“标识符”而不必乱用下划线)
这是一个新的运营商,即将进入Python 3并且实际上在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