elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


+  Foro de elhacker.net
|-+  Programación
| |-+  Python (Moderador: Danielㅤ)
| | |-+  [Python] Retornar valores en funciones de orden superior (Solucionado)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Python] Retornar valores en funciones de orden superior (Solucionado)  (Leído 4,799 veces)
DeMoNcRaZy


Desconectado Desconectado

Mensajes: 420


$~*|_


Ver Perfil
[Python] Retornar valores en funciones de orden superior (Solucionado)
« en: 18 Agosto 2015, 13:23 pm »

Buenas,

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

Tengo esto:

Código
  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)
  17.  

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.


« Última modificación: 19 Agosto 2015, 02:14 am por YuseTist » En línea

Esta página web no está disponible - Google Chrome
MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.524


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: [Python] Retornar valores en funciones de orden superior
« Respuesta #1 en: 18 Agosto 2015, 13:35 pm »

Usando el script de esta forma, funciona:

Código
  1. if __name__ == '__main__':
  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('multi')
  15.    print fGuardada(3, 4)
  16.  

Ahora, el porqué, es algo que tampoco entiendo (aunque no tengo mucha experiencia en python).
Si usaras clases sería más sencillo (de entender), pero bueno, eso ya es otra cosa...

Saludos!

EDIT: He copiado tu código en Notepad++ y, por como lo tengo configurado, me ha corregido la identación. Con ésto, tu código funciona perfectamente.
Como prueba, reemplaza todos los TABs por espacios. para verificar que no sea un problema de identación.

Saludos!


« Última modificación: 18 Agosto 2015, 13:42 pm por MCKSys Argentina » En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

DeMoNcRaZy


Desconectado Desconectado

Mensajes: 420


$~*|_


Ver Perfil
Re: [Python] Retornar valores en funciones de orden superior
« Respuesta #2 en: 18 Agosto 2015, 13:43 pm »

Agradezco tu respuesta.

Una pregunta, que hace dicha función:

Código
  1. if __name__ == '__main__':

Estoy inicializandome y no me he topado con esto aún, si puediras explicarme algo así por encima.. cual es su función, etc.. te lo agradecería.

Gracias.

Saludos.



EDIT: Intento probar de varias formas, pero al parecer solo logro que me funcione si tengo añadida la función que me pasaste anteriormente.

Saludos.
« Última modificación: 18 Agosto 2015, 14:02 pm por YuseTist » En línea

Esta página web no está disponible - Google Chrome
MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.524


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: [Python] Retornar valores en funciones de orden superior
« Respuesta #3 en: 18 Agosto 2015, 15:13 pm »

Hola!

Esa funcion sale porque uso PyScripter como editor.
En este IDE, cuando creas un script nuevo, te aparece lo siguiente:

Código
  1. #-------------------------------------------------------------------------------
  2. # Name:        module1
  3. # Purpose:
  4. #
  5. # Author:      Administrator
  6. #
  7. # Created:     18/08/2015
  8. # Copyright:   (c) Administrator 2015
  9. # Licence:     <your licence>
  10. #-------------------------------------------------------------------------------
  11.  
  12. def main():
  13.    pass
  14.  
  15. if __name__ == '__main__':
  16.    main()
  17.  

Cuando ejecutas el codigo, la funciona main() se llama. Esta es la doc de Python que explica el tema.

Saludos!
En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

tincopasan


Desconectado Desconectado

Mensajes: 1.286

No es lo mismo conocer el camino que recorrerlo.


Ver Perfil
Re: [Python] Retornar valores en funciones de orden superior
« Respuesta #4 en: 18 Agosto 2015, 20:06 pm »

fijate que has definido la funcion como "multiplicacion" y en el return dice: "mutiplicación" por lo cual no encuentra la función a llamar! No es necesario usar la función main como lo hace MCKSys , pero muchos programadores la usan como una buena forma de sintaxis del código
« Última modificación: 18 Agosto 2015, 20:12 pm por tincopasan » En línea

DeMoNcRaZy


Desconectado Desconectado

Mensajes: 420


$~*|_


Ver Perfil
Re: [Python] Retornar valores en funciones de orden superior
« Respuesta #5 en: 18 Agosto 2015, 21:58 pm »

fijate que has definido la funcion como "multiplicacion" y en el return dice: "mutiplicación" por lo cual no encuentra la función a llamar! No es necesario usar la función main como lo hace MCKSys , pero muchos programadores la usan como una buena forma de sintaxis del código

Gracias por la respuesta, al parecer ha sido un fallo de ortografía pero lo he correjido y me sigue dando error, de echo lo intenté simplificar para comprobarlo mejor y nada.

Código
  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)

El error que me salta:

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

PD: La línea 16 es:

Código
  1. print fGuardada(3, 4)

Saludos.
En línea

Esta página web no está disponible - Google Chrome
tincopasan


Desconectado Desconectado

Mensajes: 1.286

No es lo mismo conocer el camino que recorrerlo.


Ver Perfil
Re: [Python] Retornar valores en funciones de orden superior
« Respuesta #6 en: 19 Agosto 2015, 01:59 am »

el código que pusiste cambiando el error ortográfico debería andar, salvo claro está, que como te dijo MCKSys lo tengas mal identado, lo he probado con una pequeña modificación por que uso 3.x en vez de 2.x y funciona bien.(guarda con el segundo que pusiste porque estás nombrando igual a la función! revisa la identación por las dudas y cambiá operación == 'multi' por multiplicar por ejemplo)
En línea

DeMoNcRaZy


Desconectado Desconectado

Mensajes: 420


$~*|_


Ver Perfil
Re: [Python] Retornar valores en funciones de orden superior
« Respuesta #7 en: 19 Agosto 2015, 02:14 am »

el código que pusiste cambiando el error ortográfico debería andar, salvo claro está, que como te dijo MCKSys lo tengas mal identado, lo he probado con una pequeña modificación por que uso 3.x en vez de 2.x y funciona bien.(guarda con el segundo que pusiste porque estás nombrando igual a la función! revisa la identación por las dudas y cambiá operación == 'multi' por multiplicar por ejemplo)

Gracias por las respuestas, ya parece funcionar correctamente.
Código
  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(4, 4)

Saludos.

SOLUCIONADO
En línea

Esta página web no está disponible - Google Chrome
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda Retornar valor en java (solucionado) « 1 2 »
Java
JorgeEMX 10 26,996 Último mensaje 29 Diciembre 2006, 19:13 pm
por Ragnarok
Problema funciones, valores globales y demas
PHP
Azielito 3 2,329 Último mensaje 31 Julio 2007, 18:17 pm
por Sanjuu
Ecuaciones Diferenciales de orden superior homogeneas lineales
Foro Libre
¡Micronet! 0 2,232 Último mensaje 16 Octubre 2010, 03:38 am
por ¡Micronet!
[Python] Importar Funciones de C++ a Modulo de Python
Python
Di6it4Lj4ck4L 2 4,373 Último mensaje 2 Mayo 2011, 19:08 pm
por Di6it4Lj4ck4L
Dado string, retornar true si hay uno o más pares de paréntesis [PYTHON]
Scripting
Panic0 5 3,279 Último mensaje 1 Febrero 2022, 01:23 am
por MinusFour
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines