Solución:
PEP572 propuso apoyo para la :=
operador en Python para permitir asignaciones de variables dentro de expresiones.
Esta sintaxis está disponible en Python 3.8.
Respuesta actualizada
En el contexto de la pregunta, estamos tratando con pseudocódigo, pero comenzando en Python 3.8, :=
es en realidad un operador válido que permite la asignación de variables dentro de expresiones:
# Handle a matched regex
if (match := pattern.search(data)) is not None:
# Do something with match
# A loop that can't be trivially rewritten using 2-arg iter()
while chunk := file.read(8192):
process(chunk)
# Reuse a value that's expensive to compute
[y := f(x), y**2, y**3]
# Share a subexpression between a comprehension filter clause and its output
filtered_data = [y for x in data if (y := f(x)) is not None]
Consulte PEP 572 para obtener más detalles.
Respuesta original
Lo que has encontrado es pseudocódigo
Pseudocódigo es una descripción informal de alto nivel del principio operativo de un programa informático u otro algoritmo.
:=
es en realidad el operador de asignación. En Python esto es simplemente =
.
Para traducir este pseudocódigo a Python, necesitaría conocer las estructuras de datos a las que se hace referencia y un poco más de la implementación del algoritmo.
Algunas notas sobre psuedocode:
-
:=
es el operador de asignación o=
en Python -
=
es el operador de igualdad o==
en Python - Hay ciertos estilos y su millaje puede variar:
Estilo 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
Estilo 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;
}
Tenga en cuenta las diferencias en el uso de corsé y el operador de asignación.
El código de la pregunta es un pseudocódigo; allí, :=
representa asignación.
Sin embargo, para los visitantes futuros, lo siguiente podría ser más relevante: la próxima versión de Python (3.8) obtendrá un nuevo operador, :=
, permitiendo expresiones de asignación (Se pueden encontrar detalles, ejemplos motivadores y discusión en PEP 572, que fue aceptado provisionalmente a fines de junio de 2018).
Con este nuevo operador, puede escribir cosas como estas:
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]
en lugar de estos:
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]