Foros del Web » Programando para Internet » Python »

[SOLUCIONADO] [Python] Retornar valores en funciones de orden superior

Estas en el tema de [Python] Retornar valores en funciones de orden superior en el foro de Python en Foros del Web. Buenas, Intento pasar unos valores mediante unas funciones para realizar dichas operaciones, pero no logro entenderlo del todo. Tengo esto: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código Python: Ver ...
  #1 (permalink)  
Antiguo 18/08/2015, 05:24
Avatar de Tropy  
Fecha de Ingreso: diciembre-2013
Mensajes: 62
Antigüedad: 10 años, 4 meses
Puntos: 1
[Python] Retornar valores en funciones de orden superior

Buenas,

Intento pasar unos valores mediante unas funciones para realizar dichas operaciones, pero no logro entenderlo del todo.

Tengo esto:

Código Python:
Ver original
  1. #Funciones de orden superior
  2.     def seleccion(operacion):
  3.         def suma(n, m):
  4.             return n + m
  5.      
  6.         def multiplicacion(n, m):
  7.             return n * m
  8.      
  9.         if operacion == 'suma':
  10.             return suma
  11.         elif operacion == 'multi':
  12.             return mutiplicacion
  13.      
  14.     fGuardada = seleccion('multi')
  15.      
  16.     print fGuardada(3, 4)



Y me salta este error:

Código:
Traceback (most recent call last):
  File "de.py", line 16, in <module>
    print fGuardada(3, 4)
TypeError: 'NoneType' object is not callable
He probado diferentes maneras para que puedo correr, pero nada.

A poder ser agradecería que me explicasen que es lo que hago mal.
Gracias.

Saludos.
  #2 (permalink)  
Antiguo 18/08/2015, 05:49
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 10 años, 7 meses
Puntos: 578
Respuesta: [Python] Retornar valores en funciones de orden superior

No sé Python, pero parece que estás declarando la variable dentro de la misma función.

Última edición por PHPeros; 18/08/2015 a las 06:16
  #3 (permalink)  
Antiguo 18/08/2015, 05:58
Avatar de Tropy  
Fecha de Ingreso: diciembre-2013
Mensajes: 62
Antigüedad: 10 años, 4 meses
Puntos: 1
Respuesta: [Python] Retornar valores en funciones de orden superior

Cita:
Iniciado por PHPeros Ver Mensaje
No sé Python, pero parece que estás declarando la variable dentro de la misma función.
Gracias por la respuesta, pero el error no se debe a ello. Estoy intentando lo que dijiste y me sigue dando error.

Ciertamente está fuera de función al parecer, pero nada.
Aquí se visualiza mejor, que el otro tenía espacios.

Código Python:
Ver original
  1. def seleccion(operacion):
  2.     def suma(n, m):
  3.         return n + m
  4.  
  5.     def multiplicacion(n, m):
  6.         return n * m
  7.  
  8.     if operacion == 'suma':
  9.         return suma
  10.     elif operacion == 'multi':
  11.         return mutiplicacion
  12.  
  13. fGuardada = seleccion('multi')
  14.  
  15. print fGuardada(3, 4)

Saludos.
  #4 (permalink)  
Antiguo 18/08/2015, 06:03
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 10 años, 7 meses
Puntos: 578
Respuesta: [Python] Retornar valores en funciones de orden superior

Tienes un typo en el código (mutiplicacion), igual es eso.
  #5 (permalink)  
Antiguo 18/08/2015, 13:37
Avatar de Tropy  
Fecha de Ingreso: diciembre-2013
Mensajes: 62
Antigüedad: 10 años, 4 meses
Puntos: 1
Respuesta: [Python] Retornar valores en funciones de orden superior

Cita:
Iniciado por PHPeros Ver Mensaje
Tienes un typo en el código (mutiplicacion), igual es eso.
He probado y tampoco, al igual lo intente con una opción (suma) y me da el error de nuevo.

Es raro, pero habrá algún error tonto y no me doy cuenta...
Gracias por tus respuestas.

Saludos.

--------------------------------------------------------------------------------------------------------------------------------------------------------------------

EDIT: Había un error tonto en la ortografía de multiplicación, había puesto mutiplicacion sin la 'L', pero aún así intenté corregirlo y simplificarlo y me sigue dando el mismo error.
Código Python:
Ver original
  1. #Funciones de orden superior
  2. def seleccion(operacion):
  3.     def suma(n, m):
  4.         return n + m
  5.  
  6.     def multi(n, m):
  7.         return n * m
  8.  
  9.     if operacion == 'suma':
  10.         return suma
  11.     elif operacion == 'multi':
  12.         return multi
  13.  
  14. fGuardada = seleccion('multi')
  15.  
  16. print fGuardada(3, 4)

Me salta este error:

Código:
Traceback (most recent call last):
  File "de.py", line 16, in <module>
    print fGuardada(3, 4)
TypeError: 'NoneType' object is not callable
Saludos.

Última edición por Tropy; 18/08/2015 a las 14:07
  #6 (permalink)  
Antiguo 18/08/2015, 14:13
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: [Python] Retornar valores en funciones de orden superior

Pues acabo de probar tu código, con el sangrado corregido, y funciona bien, lo guardé en un archivo y al correrlo imprime "12". Esto es en Python 2.7
  #7 (permalink)  
Antiguo 18/08/2015, 14:17
 
Fecha de Ingreso: enero-2014
Mensajes: 47
Antigüedad: 10 años, 3 meses
Puntos: 0
Respuesta: [Python] Retornar valores en funciones de orden superior

Hola Tropy, antes que nada hay una mala lógica implementada en lo que quieres hacer te explico:

Tienes una función llamada selección que recibe el parámetro operación y posee dos funciones más llamadas suma y multiplicación que reciben 2 parametros mas, ahora bien donde viene el error? intentas guardar un valor de retorno de la función selección que no retorna ningún valor debido a que no pasas los parámetros correspondientes a las funciones suma y multiplicación, te dejo un ejemplo de las dos posibilidades que podrías implementar a ver si entiende mejor:

Opción 1:
Enviar los parámetros desde dentro de la función Selección y retornar el valor de las misma.
Código Python:
Ver original
  1. def seleccion(operacion):
  2.     def suma(n, m):
  3.         return n + m
  4.      
  5.     def multiplicacion(n, m):
  6.         return n * m
  7.    
  8.     if operacion=='multi':
  9.         return multiplicacion(5,2)
  10.  
  11. fGuardada = seleccion("multi")
  12. print (fGuardada)

Opción 2 (Y más eficiente):

Agregar dos parámetros a la función selección y de esta forma pasar la operación a realizarse y los dos valores a los cuales se le aplicará la operación ejemplo:
Código Python:
Ver original
  1. seleccion("multi",5,2)
te dejo de tarea que desarrolles el código completo.

Hecho en python 3.4
  #8 (permalink)  
Antiguo 18/08/2015, 15:23
Avatar de Tropy  
Fecha de Ingreso: diciembre-2013
Mensajes: 62
Antigüedad: 10 años, 4 meses
Puntos: 1
Respuesta: [Python] Retornar valores en funciones de orden superior

Utilizo python 2.7.6:

Código:
Python 2.7.6 (default, Mar 22 2014, 22:59:56) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
He probado tu opción pero me da otro error:

Código Python:
Ver original
  1. def seleccion(operacion):
  2.         def suma(n, m):
  3.             return n + m
  4.          
  5.         def multiplicacion(n, m):
  6.             return n * m
  7.        
  8.         if operacion=='multi':
  9.             return multiplicacion(5,2)
  10.      
  11. fGuardada = seleccion("multi")
  12. print fGuardada

Pero me da este error:

Código:
File "de.py", line 2
    def seleccion(operacion):
    ^
IndentationError: unexpected indent
Luego intenté simplificarlo para haber si daba con el error:

Código Python:
Ver original
  1. def seleccion(operacion):
  2.     def suma(n, m):
  3.         return n + m
  4.  
  5.     if operacion == 'suma':
  6.         return suma
  7.  
  8. fGuardada = seleccion('suma')
  9.  
  10. print fGuardada(3, 4)

Pero me da este error:

Código:
Traceback (most recent call last):
  File "de.py", line 11, in <module>
    print fGuardada(3, 4)
TypeError: 'NoneType' object is not callable
También probé con darle un valor al return suma y me devuelve un resultado de: None

Gracias por sus respuestas.
Y disculpen por las molestias ocacionadas.

Saludos.

---------------------------------------------------------------------------------------------------------------------------------------------------

EDIT: Gracias por la ayuda, ya parece funcionar correctamente.

Código Python:
Ver original
  1. #Funciones de orden superior
  2. def seleccion(operacion):
  3.     def suma(n, m):
  4.         return n + m
  5.  
  6.     def multiplicacion(n, m):
  7.         return n * m
  8.  
  9.     if operacion == 'suma':
  10.         return suma
  11.     elif operacion == 'multi':
  12.         return multiplicacion
  13.  
  14. fGuardada = seleccion('suma')
  15. print fGuardada(10, 40)

Saludos.

Última edición por Tropy; 18/08/2015 a las 18:15

Etiquetas: funciones, orden, retornar, superior
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:12.