web-dev-qa-db-fra.com

Que signifie deux points (: =) dans Python signifie?

Que fait le := opérande signifie, plus spécifiquement pour Python?

Quelqu'un peut-il expliquer comment lire cet extrait de code?

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

Ce que vous avez trouvé est pseudocode

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

Le pseudocode est une description informelle de haut niveau du principe de fonctionnement d'un programme informatique ou d'un autre algorithme.

les := L'opérateur est en fait l'opérateur d'affectation. Dans python c'est simplement le = opérateur.

Pour traduire ce pseudocode en Python, vous devez connaître les structures de données référencées et un peu plus de l'implémentation de l'algorithme.

Quelques notes sur le pseudo-code

:= est l'opérateur d'affectation ou = en python

= est l'opérateur d'égalité ou == en python

Notez qu'il existe certains styles de pseudocode et que votre kilométrage peut varier:

PseudoCode de style Pascal

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

Pseudocode de style 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;
}

Notez les différences d'utilisation des accolades et de l'opérateur d'affectation.

11
Mike McMahon

PEP572 support proposé pour le := opérateur dans Python pour autoriser les affectations de variables dans les expressions.

Cette syntaxe sera disponible dans Python 3.8.

36
chadlagore

Le code dans la question est un pseudo-code; Là, := représente l'affectation.

Pour les futurs visiteurs, cependant, les éléments suivants pourraient être plus pertinents: la prochaine version de Python (3.8) gagnera un nouvel opérateur, :=, permettant des expressions d'affectation (des détails, des exemples motivants et une discussion peuvent être trouvés dans PEP 572 , qui a été provisoirement accepté fin juin 2018).

Avec ce nouvel opérateur, vous pouvez écrire des choses comme celles-ci:

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]

au lieu de ceux-ci:

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]
23
Clément