12-02-2021, 09:36 PM
Hola. Disculpad mi torpeza, pero soy MUY novato. Estoy intentando asimilar las funciones de orden superior, en concreto lambda, filter y map. En principio me pareció bastante sencillo. Pero en el siguiente ejemplo, me confunde el diferente comportamiento de un método y lo que yo creía que era su "versión lambda" (seguramente también estoy equivocado en esto):
class Profesion:
def __init__(self, empleo, codigo):
self.empleo = empleo
self.codigo = codigo
def __str__(self):
return "{}, código {}".format(self.empleo, self.codigo)
empleados = [
Profesion("Analista", 4),
Profesion("Diseñador", 6),
Profesion("Consultor", 3),
Profesion("Programador", 5)
]
#El siguiente map() suma 20 al argumento "código"
actualizar = map(lambda a: a.codigo + 20, empleados)
for a in actualizar:
print (a, end=" ")
24 26 23 25
#pero no modifica la lista original
for empleado in empleados:
print(empleado)
Analista, código 4
Diseñador, código 6
Consultor, código 3
Programador, código 5
#Pero este map() suma 20 al argumento "código" ...
def incrementar(a):
a.codigo += 20
return a.codigo
actualizar2 = map(incrementar, empleados)
for a in actualizar2:
print(a, end=" ")
24 26 23 25
#...y sí modifica la lista original.
for empleado in empleados:
print(empleado)
Analista, código 24
Diseñador, código 26
Consultor, código 23
Programador, código 25
>>>Cualquier ayuda será bien recibida
class Profesion:
def __init__(self, empleo, codigo):
self.empleo = empleo
self.codigo = codigo
def __str__(self):
return "{}, código {}".format(self.empleo, self.codigo)
empleados = [
Profesion("Analista", 4),
Profesion("Diseñador", 6),
Profesion("Consultor", 3),
Profesion("Programador", 5)
]
#El siguiente map() suma 20 al argumento "código"
actualizar = map(lambda a: a.codigo + 20, empleados)
for a in actualizar:
print (a, end=" ")
24 26 23 25
#pero no modifica la lista original
for empleado in empleados:
print(empleado)
Analista, código 4
Diseñador, código 6
Consultor, código 3
Programador, código 5
#Pero este map() suma 20 al argumento "código" ...
def incrementar(a):
a.codigo += 20
return a.codigo
actualizar2 = map(incrementar, empleados)
for a in actualizar2:
print(a, end=" ")
24 26 23 25
#...y sí modifica la lista original.
for empleado in empleados:
print(empleado)
Analista, código 24
Diseñador, código 26
Consultor, código 23
Programador, código 25
>>>Cualquier ayuda será bien recibida