Что означает двоеточие (: =) в Python?

Что означает операнд :=, более конкретно для Python?

Может кто-нибудь объяснить, как читать этот фрагмент кода?

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

Ответ 1

То, что вы нашли, это псевдокод

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

Псевдокод - это неофициальное высокоуровневое описание действующего принцип компьютерной программы или другой алгоритм.

Оператор := фактически является оператором присваивания. В python это просто оператор =.

Чтобы перевести этот псевдокод в Python, вам нужно знать ссылки на структуры данных и немного больше реализации алгоритма.

Некоторые примечания о psuedocode

:= - оператор присваивания или = в 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;
}

Обратите внимание на различия в использовании скобок и оператора присваивания.

Ответ 2

PEP572 предложил поддержку оператора := в Python, чтобы разрешить присваивание переменных в выражениях.

Этот синтаксис будет доступен в Python 3.8.

Ответ 3

Код в вопросе является псевдокодом; там := представляет назначение.

Для будущих посетителей, тем не менее, может быть уместно следующее: следующая версия Python (3.8) получит новый оператор, :=, позволяющий выражать присваивания (подробности, примеры мотивации и обсуждения) в PEP. 572, который был временно принят в конце июня 2018 года).

С этим новым оператором вы можете написать что-то вроде этого:

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]

Ответ 4

Выпуск Happy 3.8 14 октября

Существует новый синтаксис: =, который присваивает значения переменным как часть большего выражения. Его ласково называют "оператором моржа" из-за его сходства с глазами и клыками моржа.

В этом примере выражение присваивания помогает избежать двойного вызова len():

если (n: = len (a))> 10:   print (f "Список слишком длинный ({n} элементов, ожидается & lt; = 10)")

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