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
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:
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
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.
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.
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]