125

我已经看到:=在几个代码示例中使用过,但从来没有附带解释。在不知道它的正确名称的情况下,完全不可能用谷歌搜索它的使用。

它有什么作用?

4

12 回答 12

115

http://en.wikipedia.org/wiki/Equals_sign#In_computer_programming

在计算机编程语言中,等号通常表示用于测试值相等性的布尔运算符(例如在 Pascal 或 Eiffel 中),这与符号在数学中的用法一致,或者表示赋值运算符(例如在类 C 语言中) )。做出前一种选择的语言通常使用冒号等号 (:=) 或 ≔ 来表示它们的赋值运算符。做出后一种选择的语言通常使用双等号 (==) 来表示其布尔相等运算符。

注意:我通过搜索找到了这个colon equals operator

于 2011-03-17T20:19:23.817 回答
54
于 2011-03-17T20:20:46.947 回答
29

在静态类型语言中, Go :=是一步完成的初始化和赋值。这样做是为了允许在编译语言中创建类似解释的变量。

// Creates and assigns
answer := 42

// Creates and assigns
var answer = 42
于 2014-01-19T10:12:02.370 回答
9

来自编程语言世界之外的另一种解释来自Wolfram Mathworld等人:

如果 A 和 B 在定义上相等(即,A 被定义为 B),那么这象征性地写为 A=B,A:=B,或者有时 A≜B。

http://mathworld.wolfram.com/Defined.html

https://math.stackexchange.com/questions/182101/appropriate-notation-equiv-versus

于 2016-03-28T19:16:20.327 回答
6

某些语言:=用作赋值运算符。

于 2011-03-17T20:18:00.447 回答
3

在很多 CS 书籍中,它被用作赋值运算符,以区别于相等运算符=。但是,在许多高级语言中,赋值是=,相等是==

于 2011-03-17T20:19:53.763 回答
1

这是赋值运算符的旧(帕斯卡)语法。它会像这样使用:

a := 45;

它也可能在其他语言中,可能在类似的用途中。

于 2011-03-17T20:19:16.943 回答
1

Python中:

命名表达式( NAME := expr) 是在 Python 3.8 中引入的。它允许在当前正在评估的表达式中分配变量。冒号等于运算符 :=有时被称为海象运算符,因为它看起来像一个海象表情符号。

例如:

if any((comment := line).startswith('#') for line in lines):
    print(f"First comment: {comment}")
else:
    print("There are no comments")

:=如果您交换了for ,这将是无效的=。请注意命名表达式周围的附加括号。另一个例子:

# Compute partial sums in a list comprehension
total = 0
values = [1, 2, 3, 4, 5]
partial_sums = [total := total + v for v in values]
# [1, 3, 6, 10, 15]
print(f"Total: {total}")  # Total: 15

请注意,该变量total不是理解的本地comment变量(第一个示例也是如此)。命名表达式中的NAME不能是表达式中的局部变量,因此,例如,[i := 0 for i, j in stuff]它将是无效的,因为i 它是列表推导的局部变量。

我从 PEP 572 文档中举了一些例子——这是一本好书!一旦我的公司从 Python 3.6 升级,我期待使用命名表达式。希望这有帮助!

资料来源:走向数据科学文章PEP 572

于 2021-12-08T22:43:28.170 回答
1

许多编程语言,尤其是PascalAda,使用冒号后跟等号 ( :=) 作为赋值运算符,以将其与作为相等测试的单个等号区分开来(C 代替使用单个等号作为赋值,和一个双等于作为平等测试)。

参考:冒号(标点符号)

于 2021-08-24T06:15:20.473 回答
0

对于 VB.net,

一个构造函数(对于这种情况,Java 中的 Me = this):

Public ABC(int A, int B, int C){
Me.A = A;
Me.B = B;
Me.C = C;
}

当您创建该对象时:

new ABC(C:=1, A:=2, B:=3)

然后,不管参数的顺序如何,那个 ABC 对象都有 A=2, B=3, C=1

所以,是的,其他人有效阅读您的代码的非常好的做法

于 2020-02-05T07:58:02.830 回答
0

这就像一个没有使用小于号 <= 的箭头,所以就像每个人已经说过的“赋值”运算符一样。与等价的逻辑运算符相反,使设置的内容变得清晰。

在数学中,它类似于等于,但 A := B 意味着 A 被定义为 B,三重线等于可以用来表示它在定义上是相似和相等的,但并不总是相同的东西。

无论如何,我指出了那些可能在发明它的人的脑海中的其他参考资料,但实际上只是平面等于而不是等于被采用(或可能很容易与 =< 混淆)并且需要一些新的定义分配的东西,并且这是最有意义的。

历史参考:我第一次看到这个是在 SmallTalk 的原始对象语言中,Apple 的 SJ 只复制了 Windows 部分,微软的 BG 进一步淡化了它们(单线程)。最终,NeXT 中的 SJ 从 Xerox PARC 中吸取了第二个更重要的教训,即成为 Objective C。

无论如何,他们只是从 ALGOL 1958 中采用冒号等于运算符,后来被 Pascal 推广

https://en.wikipedia.org/wiki/PARC_(公司)

https://en.wikipedia.org/wiki/Assignment_(computer_science)

赋值通常允许变量在其生命周期和范围内的不同时间保存不同的值。但是,某些语言(主要是严格的函数式)不允许这种“破坏性”重新分配,因为它可能意味着非本地状态的更改。目的是加强参照透明性,即不依赖于某些变量的状态的函数,但在任何时间点对给定的一组参数输入产生相同的结果。

https://en.wikipedia.org/wiki/Referential_transparency

于 2018-06-03T09:59:21.937 回答
-2

冒号等于在 Algol 及其后代(如 Pascal 和 Ada)中使用,因为它与 ASCII 与左箭头符号一样接近。

使用等号进行赋值和使用双等号进行比较的奇怪约定是从 C 语言开始的。

在 Prolog 中,赋值和相等测试没有区别。

于 2016-02-14T23:31:51.627 回答