什么是:=运营商?

问题描述 投票:7回答:6

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

x := y

这个:=运营商通常被称为什么,它做什么?

syntax programming-languages operator-keyword colon-equals
6个回答
14
投票

在支持运营商:=的所有语言中,它意味着分配。

  • 在支持运算符:=的语言中,=运算符通常意味着相等比较。
  • =表示赋值的语言中,==通常用于相等比较。

:=是否意味着=

我记不起任何语言:==相同。


在MySQL中,:==都用于assignment,但它们不可互换,选择正确的取决于上下文。为了使问题更加混乱,=算子也被用于comparison=作为转让或比较的解释也取决于背景。


4
投票

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


1
投票

很多语言都使用普通运算符。通常,=保留用于变量赋值,如果它是单独的,则不应在数学上下文中查看。尽管==测试了Java和Bash等一些语言的平等性


1
投票

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;)。


1
投票

该符号称为“成为”,并随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中。

(空格没有意义,所以可以插入“标识符”而不必乱用下划线)


1
投票

这是一个新的运营商,即将进入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

© www.soinside.com 2019 - 2024. All rights reserved.