Python中冒号等于(:=)是什么意思?

时间:2014-09-23 16:31:11

标签: python colon-equals

:=操作数的含义是什么,更具体地说是Python?

有人可以解释如何阅读这段代码吗?

node := root, cost = 0
frontier := priority queue containing node only
explored := empty set

5 个答案:

答案 0 :(得分:30)

PEP572建议支持Python中的:=运算符,以允许在表达式中进行变量赋值。

此语法将在Python 3.8中提供。

答案 1 :(得分:20)

问题中的代码是伪代码;在那里,:=代表任务。

但是,对于将来的访问者而言,以下内容可能更相关:下一版本的Python(3.8)将获得一个新的运算符:=,允许使用赋值表达式(详细信息,示例和讨论内容,请访问PEP 572(已于2018年6月下旬临时接受)。

使用此新运算符,您可以编写如下内容:

if (m := re.search(pat, s)):
    print m.span()
else if (m := re.search(pat2, s):
    …

while len(bytes := x.read()) > 0:
    … do something with `bytes`

[stripped for l in lines if len(stripped := l.strip()) > 0]

代替这些:

m = re.search(pat, s)
if m:
    print m.span()
else:
    m = re.search(pat2, s)
    if m:
        …

while True:
    bytes = x.read()
    if len(bytes) <= 0:
        return
    … do something with `bytes`

[l for l in (l.stripped() for l in lines) if len(l) > 0]

答案 2 :(得分:12)

您发现的是伪代码

http://en.wikipedia.org/wiki/Pseudocode

  

Pseudocode 是对操作的非正式高级描述   计算机程序或其他算法的原理。

:=运算符实际上是赋值运算符。在python中,这只是=运算符。

要将此伪代码转换为Python,您需要知道所引用的数据结构,以及更多的算法实现。

关于伪代码的一些注意事项

:=是赋值运算符或python中的=

=是等于运算符或python中的==

请注意,某些样式的伪代码可能会有所不同:

Pascal Style PseudoCode

procedure fizzbuzz
For i := 1 to 100 do
    set print_number to true;
    If i is divisible by 3 then
        print "Fizz";
        set print_number to false;
    If i is divisible by 5 then
        print "Buzz";
        set print_number to false;
    If print_number, print i;
    print a newline;
end

C风格伪代码

void function fizzbuzz
For (i = 1; i <= 100; i++) {
    set print_number to true;
    If i is divisible by 3
        print "Fizz";
        set print_number to false;
    If i is divisible by 5
        print "Buzz";
        set print_number to false;
    If print_number, print i;
    print a newline;
}

请注意大括号用法和赋值运算符的不同之处。

答案 3 :(得分:5)

此符号:=是Python中的赋值运算符(通常称为Walrus运算符)。简而言之,walrus运算符压缩我们的代码以使其短一些。

这是一个非常简单的示例:

# without walrus
n = 30
if n > 10:
    print(f"{n} is greater than 10")

# with walrus
if (n := 30) > 10:
    print(f"{n} is greater than 10")

这些代码是相同的(并输出相同的东西),但是如您所见,带有walrus运算符的版本仅用两行代码压缩,从而使事情变得更紧凑

现在,为什么要使用海象运算符?

首先,不要有义务。

我本人甚至很少使用这个。我只是使用walrus运算符来压缩我的代码,主要是在使用正则表达式时。

您还可以找到自己的用例。重要的是您对此有一个大概的了解,并且知道遇到此类问题时何时对您有所帮助。

到目前为止,这是我如何在更高层次上解释海象运算符。希望你学到了一些东西。

答案 4 :(得分:1)

快乐3.8版本于10月14日发布

有一种新的语法:=,它将值分配给变量,作为较大表达式的一部分。由于与海象的眼睛和象牙很像,它被亲切地称为“海象算子”。

在此示例中,赋值表达式有助于避免两次调用len():

如果(n:= len(a))> 10:     print(f“列表太长({n}个元素,预期<= 10)”)

https://docs.python.org/3/whatsnew/3.8.html