comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Funciones en Python

  • 2 Respuestas
  • 1762 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Barlan

  • *
  • Underc0der
  • Mensajes: 89
  • Actividad:
    0%
  • Reputación 0
  • "The demons of my own design"
    • Ver Perfil
  • Twitter: @BarlanV
« en: Mayo 19, 2015, 02:55:19 pm »



Citar
En programación, una función es un grupo de instrucciones con un objetivo en particular y que se ejecuta al ser llamada desde otra función o procedimiento.



Comenzamos escribiendo la palabra clave def, seguido de un nombre descriptivo (que al momento de leerlo, sepas qué es lo que hará). Luego, se abren y cierran paréntesis, y dentro de ellas podemos colocar parámetros (variables) que el algoritmo (el bloque de código que contendrá la función) usará. Si la función no requiere que se le pasen variables, se puede dejar vacio.
Al final, escribimos los dos puntos ( : )

Código: Python
  1. def nombre(parametro1, parametro2, ..., parametron):
  2.         algoritmo(s)
  3.  



La función creada no servirá de nada hasta que se le llame. Para esto, simplemente escribimos su nombre:
Código: Python
  1. def nombre():
  2.         print("Hola")
  3.  
  4. nombre() #Llamamos la función escribiendo su nombre
  5.  



Una función puede retornar datos, para esto, se usa la palabra return, seguido de lo que se desea retornar. Además, podemos designar el retorno de datos a una variable:
Código: Python
  1. def funcion():
  2.     return "Hola Mundo"
  3.  
  4. frase = funcion()
  5. print(frase)
  6.  



Podemos esperar un numero desconocido de variables en una función (como muchos nombres, por ejemplo), así que al momento de pasar esos datos a la función, hacemos lo siguiente:
Código: Python
  1. def recorrer_parametros_arbitrarios(parametro_fijo, *arbitrarios):
  2.     print(parametro_fijo)
  3.  
  4.     # Los parámetros arbitrarios se recorren como tuplas
  5.     for argumento in arbitrarios:
  6.         print(argumento)
  7.  
  8. recorrer_parametros_arbitrarios('Fijo', 'arbitrario 1', 'arbitrario 2', 'arbitrario 3')
  9.  

Como podemos ver, tenemos una variable fija (de la cual sabemos de antemano que será enviada), pero también tenemos algo entre los paréntesis: *arbitrarios.
Ella nos dice que se están esperando un numero desconocido de variables, y al momento de recibirlas, podemos recorrerlas como si fueran una tupla, imprimiendo cada valor.



Siempre deben de pasarse variables en el orden que la función lo requiera.
Por ejemplo, una función requiere 2 variables tipo string, pero cada una será usada en una operación de condicional.
Código: Python
  1. def saludo(idioma, saludo):
  2.     if idioma == "es":
  3.         print("Idioma: Espanol\nSaludo: %s" % saludo)
  4.     if idioma == "en":
  5.         print("Languaje: English\nRegard: %s" % saludo)
  6.  
  7. saludo("es", "Hola!")
  8.  

Primero pasamos el tipo de idioma a usar. Si el idioma que seleccionamos es "es" (Español), nos mostrará un output en Español saludandonos.
Pero si le pasabamos un "en" (Inglés) nos mostrará un output en Inglés.

Si nosotros pasaramos el saludo primero en lugar del idioma que queremos... osea:
Código: Python
  1. saludo("Hola", "es")
  2.  

No nos mostraría nada, ya que en la función, establecimos que la primera variable sería el idioma, y no el saludo. Así que las condicionales serían falsas.


Podemos definir parametros en los mismos paréntesis, reduciendo la cantidad de variables que se esperan
OJO: Siempre deben de colocarse primero las variables que serán enviadas a la función, seguidas de las variables que definiremos en el mismo paréntesis:
Código: Python
  1. def saludo(saludo, idioma="Espanol"):
  2.     print("Un saludo en el idioma %s: %s" % (idioma, saludo))
  3.  
  4. saludo("Hola amigos!")
  5.  
Citar
Un saludo en el idioma Espanol: Hola amigos!



De igual manera, podemos definir las variables al momento de pasarlas a la función:
Código: Python
  1. def hola(saludo):
  2.     print(saludo)
  3.  
  4. hola(saludo="Hola amigos!")
  5.  



Tenemos la opción de definir varios parametros al momento de enviarlas a la función (como los arbitrarios). Para esto, necesitamos colocar **kwords en los paréntesis (en lugar de un solo asterisco, ahora usamos 2 asteriscos para diferenciar entre "tuplas", y "diccionarios".
kwords = Keywords (clave=valor)
Código: Python
  1. def idiomas(**kwords):
  2.     for idioma in kwords:
  3.         print(idioma + " : " + kwords[idioma]) # Como podemos ver, concatenamos cada idioma con su valor.
  4.  
  5. idiomas(espanol="Hola", ingles="Hi!", japones="Konnichiwa")
  6.  

Citar
espanol : Hola
ingles : Hi!
japones : Konnichiwa



Habrá ocasiones en las que una función espere una cantidad fija de variables, pero nosotros queremos enviar una tupla que contiene datos para el algoritmo de la función.
Para ello, se toma la variable a enviar, y se le envía usando un asterisco. La función sabrá que queremos enviarle una tupla, y dividirá los datos para asignarselos a cada variable.
Código: Python
  1. def calcular(base, altura):
  2.     return base * altura
  3.  
  4. datos = [35, 10]
  5. print(calcular(*datos))   # Nos dará como resultado 35*10, osea: 350
  6.  



También, puede que en lugar de tupla, querramos enviar un diccionario con los datos a utilizar. Para esto, en lugar de *, usaremos **:
Código: Python
  1. def calcular(base, altura):
  2.     return base * altura
  3.  
  4. datos = {
  5.     "base": 50,
  6.     "altura": 17
  7. }
  8. print(calcular(**datos))
  9.  

Citar
850



Llamadas recursivas

Las llamadas recursivas ocurren cuando dentro de una función llamamos a la misma funcion, haciendo que esta se vuelva a ejecutar.
Esto es útil cuando, por ejemplo, hacemos un juego donde tengamos n intentos, y si nos equivocamos, volver a comenzar.

El problema con estas llamadas, es que son fáciles de caer en bucles infinitos, por lo que solo se recomienda su uso cuando ya no hay alguna otra alternativa.

Ejemplo de una llamada:
Código: Python
  1. def jugar(intento=1):
  2.     respuesta = str(input("¿De qué color es una naranja? "))
  3.     if respuesta != "naranja":
  4.         if intento < 3:
  5.             print ("\nFallaste! Inténtalo de nuevo")
  6.             intento += 1
  7.             jugar(intento) # Llamada recursiva
  8.         else:
  9.             print ("\nPerdiste!")
  10.     else:
  11.         print ("\nGanaste!")
  12. jugar()
  13.  


Algunos otros ejemplos de funciones:


Código: Python
  1. def escaner(*ports):
  2.     for valor in ports:   # Leemos los valores de la tupla ports
  3.         for port in valor:   # Por cada valor encontrado...
  4.             print("[*] Scanning port: " + str(port))
  5.  
  6. ports = [22, 23, 999, 1024, 9999, 10234, 20302]
  7. escaner(ports)
  8.  

Resultado:
Citar
  • Scanning port: 22
  • Scanning port: 23
  • Scanning port: 999
  • Scanning port: 1024
  • Scanning port: 9999
  • Scanning port: 10234
  • Scanning port: 20302


Código: Python
  1. def diccionario(**kwords):
  2.     for servicio in kwords:
  3.         print("Escaneando " + servicio + " en puerto: " + kwords[servicio])
  4. servicios = {
  5.     "SSH": "22",
  6.     "Telnet": "23",
  7.     "SMTP": "25",
  8.     "HTTP": "80",
  9.     "IMAP": "143"
  10. }
  11. diccionario(**servicios)
  12.  

Resultado:
Citar
Escaneando IMAP en puerto: 143
Escaneando SMTP en puerto: 25
Escaneando Telnet en puerto: 23
Escaneando SSH en puerto: 22
Escaneando HTTP en puerto: 80


Ya saben, si encuentran un error, o desean criticar el post abajo en los comentarios pueden hacerlo.
Saludos!
« Última modificación: Mayo 19, 2015, 10:24:00 pm por Barlan »


Desconectado WhiZ

  • *
  • Underc0der
  • Mensajes: 395
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #1 en: Mayo 19, 2015, 04:22:11 pm »
Muy bueno Barlan! Me parece genial que colabores con estos aportes.
+1. Seguí así!

Saludos!
WhiZ



Desconectado Achraf

  • *
  • Underc0der
  • Mensajes: 18
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • Email
  • Skype: achrafon4
  • Twitter: Achrafhmi
« Respuesta #2 en: Mayo 19, 2015, 04:38:36 pm »
Muy bien detallado! Me sirvió mucho, gracias!

 

¿Te gustó el post? COMPARTILO!



[Código] Yardas a metros - Metros a yardas [Python]

Iniciado por LucaSthefano

Respuestas: 0
Vistas: 1338
Último mensaje Mayo 29, 2011, 01:27:34 am
por LucaSthefano
[Código] Entero / No Entero [Ejercicio - Python]

Iniciado por LucaSthefano

Respuestas: 0
Vistas: 1298
Último mensaje Mayo 29, 2011, 01:24:09 am
por LucaSthefano
Python Trojan - By "bLiNdFiR3"

Iniciado por d33k40

Respuestas: 1
Vistas: 1969
Último mensaje Abril 03, 2010, 11:01:59 pm
por Dharok
Python keylogger - by "bLiNdFiR3"

Iniciado por d33k40

Respuestas: 0
Vistas: 1959
Último mensaje Abril 07, 2010, 03:30:22 am
por d33k40
Python phpmyadmin "BruteForce"

Iniciado por linkgl

Respuestas: 2
Vistas: 2437
Último mensaje Agosto 19, 2011, 12:14:37 pm
por linkgl