Hola, gente, ¿cómo están?
Me acorde de repente algo que se puede hacer en lenguaje C y es pasar a una función como parámetro otra función, esa es la idea pero no me resulta en python, ¿se puede hacer que esto funcione?
Código:
def suma():
print(5+2)
def resta():
print(5-2)
def mult():
print(5*2)
def div():
print(5/2)
def oper():
calc = (suma(), resta(), mult(), div())
return calc
a = oper()
b = 1 # seria la operación a realizar(en este caso "resta")
print(a[b])
Lo dejo en manos de Uds. para que me digan si es factible.
Saludos.
Hola Daniel, ¿cómo estás?
Sí se puede. Puedes tratar a una función como a cualquier otro objeto. Aunque tienes que distinguir entre el
nombre de una función y la
llamada. Cuando el nombre aparece sin más en el código, Python entiende que lo quieres tratar como a cualquier otro objeto, mientras que, cuando está sucedido por paréntesis, entonces se trata de una llamada. Por ello tu código debería ser el siguiente.
Código:
def oper():
# Quito los paréntesis; de lo contrario, calc sería igual a (None, None, None, None).
calc = (suma, resta, mult, div)
return calc
Ahora tu última línea estaría imprimiendo la función
resta(). Si quieres ejecutarla, entonces debería ser:
Código:
# Añado paréntesis.
a[b ]()
print() es innecesario ya que el retorno de las cuatro funciones es
None.
Saludos!
Estoy muy bien Francisco.
Como era de esperar funciona a la perfección, dejo otra manera que también funciona, no creo que sea relevante
especificar donde lo encontré. -
Código:
def suma():
return 5+2
def resta():
return 5-2
def mult():
return 5*2
def div():
return 5/2
calc = (suma(), resta(), mult(), div())
b = 3
print(calc[b])
Un abrazo.
Hola gente, Francisco te pido mil disculpas por el tiempo que te hice perder (me pasa por arrebatado) ahora lo encontré y esto es exactamente lo que quería. -
Código:
def calculos(lang, a, b):
def calculos_suma():
print(a+b)
def calculos_resta():
print(a-b)
def calculos_multiplicacion():
print(a*b)
def calculos_division():
print(a/b)
lang_func = {"+": calculos_suma,
"-": calculos_resta,
"*": calculos_multiplicacion,
"/": calculos_division}
return lang_func[lang]
a=5
b=3
f = calculos("*", a, b)
f()
Saludos.
Hola Daniel, tu código está excelente. Aquí te dejo otra forma de hacerlo utilizando el módulo estándar
operator, que implementa los operadores como funciones.
Código:
import operator
func = {
"+": operator.add,
"-": operator.sub,
"*": operator.mul,
"/": operator.truediv
}
a = 5
b = 3
f = func["*"]
print(f(a, b))
Saludos!