Requisito previo: reduce() , lambda
La composición de funciones es la forma de combinar dos o más funciones de tal manera que la salida de una función se convierte en la entrada de la segunda función y así sucesivamente. Por ejemplo, sean dos funciones «F» y «G» y su composición se puede representar como F(G(x)) donde «x» es el argumento y la salida de la función G(x) se convertirá en la entrada de F() función.
Ejemplo:
# Function to add 2 # to a number def add(x): return x + 2 # Function to multiply # 2 to a number def multiply(x): return x * 2 # Printing the result of # composition of add and # multiply to add 2 to a number # and then multiply by 2 print("Adding 2 to 5 and multiplying the result with 2: ", multiply(add(5)))
Producción:
Adding 2 to 5 and multiplying the result with 2: 14
Explicación
Primero add()
se llama a la función en la entrada 5. Se add()
suma 2 a la entrada y la salida que es 7, se da como entrada a multiply()
la que se multiplica por 2 y la salida es 14
Mejor manera de implementar la composición.
Hay una mejor manera de implementar la composición de Function. Podemos crear una función especial que puede combinar dos funciones cualesquiera.
# Function to combine two # function which it accepts # as argument def composite_function(f, g): return lambda x : f(g(x)) # Function to add 2 def add(x): return x + 2 # Function to multiply 2 def multiply(x): return x * 2 # Composite function returns # a lambda function. Here add_multiply # will store lambda x : multiply(add(x)) add_multiply = composite_function(multiply, add) print("Adding 2 to 5 and multiplying the result with 2: ", add_multiply(5))
Producción:
Adding 2 to 5 and multiplying the result with 2: 14
Composición de N número de funciones
Podemos componer cualquier número de funciones modificando el método anterior.
# Function to combine two # function which it accepts # as argument def composite_function(f, g): return lambda x : f(g(x)) # Function to add 2 def add(x): return x + 2 # Function to multiply 2 def multiply(x): return x * 2 # Function to subtract 2 def subtract(x): return x - 1 # Composite function returns # a lambda function. Here # add_subtract_multiply will # store lambda x : multiply(subtract(add(x))) add_subtract_multiply = composite_function(composite_function(multiply, subtract), add) print("Adding 2 to 5, then subtracting 1 and multiplying the result with 2: ", add_subtract_multiply(5))
Producción:
Sumando 2 a 5, luego restando 1 y multiplicando el resultado por 2: 12
Ahora modificaremos nuestra función compuesta a una función que pueda componer cualquier número de funciones en lugar de dos usando la función reduce() de la biblioteca functools.
# importing reduce() from functools from functools import reduce # composite_function accepts N # number of function as an # argument and then compose them def composite_function(*func): def compose(f, g): return lambda x : f(g(x)) return reduce(compose, func, lambda x : x) # Function to add 2 def add(x): return x + 2 # Function to multiply 2 def multiply(x): return x * 2 # Function to subtract 2 def subtract(x): return x - 1 # Here add_subtract_multiply will # store lambda x : multiply(subtract(add(x))) add_subtract_multiply = composite_function(multiply, subtract, add) print("Adding 2 to 5, then subtracting 1 and multiplying the result with 2: ", add_subtract_multiply(5))
Producción:
Sumando 2 a 5, luego restando 1 y multiplicando el resultado por 2: 12
Explicación
La reduce()
función está tomando las dos primeras funciones de *func y componiéndolas usando compose()
y luego componiendo la tercera función a la función compuesta anterior y así sucesivamente. Aquí el multiply()
y subtract()
se compone primero (multiplicar (restar (x)) y luego agregar() se compone (multiplicar (restar (agregar (x))).
Publicación traducida automáticamente
Artículo escrito por Arunishsingh y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA