Mensajes: 155
Temas: 57
Registro en: Jan 2018
Reputación:
0
09-05-2018, 06:27 PM
(Última modificación: 10-05-2018, 09:45 AM por Daniel.py.)
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.
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Mensajes: 1.160
Temas: 3
Registro en: Feb 2016
Reputación:
66
09-05-2018, 07:57 PM
(Última modificación: 09-05-2018, 08:01 PM por Francisco.)
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.
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:
# Añado paréntesis. a[b ]()
print() es innecesario ya que el retorno de las cuatro funciones es None.
Saludos!
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!
Mensajes: 155
Temas: 57
Registro en: Jan 2018
Reputación:
0
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.
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Mensajes: 155
Temas: 57
Registro en: Jan 2018
Reputación:
0
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.
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Mensajes: 1.160
Temas: 3
Registro en: Feb 2016
Reputación:
66
11-05-2018, 10:07 PM
(Última modificación: 11-05-2018, 10:07 PM por Francisco.)
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.
import operator func = { "+": operator.add, "-": operator.sub, "*": operator.mul, "/": operator.truediv } a = 5 b = 3 f = func["*"] print(f(a, b))
Saludos!
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!
|