domingo, 7 de abril de 2013

Tutorial funciones python 3 desde Unix

Este blog trata sobre muchas cosas,muchas desde iOS y Linux hasta programación de scripting,en este caso veremos python ya que últimamente ya no había escrito nada últimamente en esta ocasión veremos las funciones de python, únicamente eso ya que en una entrada pasada mostré como usarlas pero no nos adentramos mucho,en esta ocasión si nos adentraremos mas sobre lo mas importante de usar funciones,de hecho dividiré esta información en dos entradas y esta es la primera parte:

Las funciones son partes de código que usamos varias veces en el mismo,ya que una función la podemos definir una vez pero llamarla todas las que sea necesario,por ejemplo tenemos que hacer lo siguiente:

Tenemos nuestra edad,la fecha de nacimiento, después lo que queremos es saber cuantas horas hemos vivido,esto seria un poco complicado ya que tenemos que definir los dias de los meses,muchas estructuras selectivas y demás cosas, así que solo haremos que calcule nuestra edad sacando el dato de la edad ingresado por nosotros y la fecha actual sacada de un modulo,esta la multiplicara por 365 dias de cada año y 24 horas de cada dia,para saber cuantas horas habrá uno vivido cuanto cumpla dicha edad si no es que ya la cumplio(a eso me refiero con estructuras selectivas),pero también queremos hacerlo para jugar,por ejemplo le hacemos el test a un pariente o a alguien,osea los datos serian distintos:

Ese es el problema,facil el problema porque solo trata de algunas operaciones aritmeticas:

Por ejemplo esta seria la solución pero para una sola fecha de nacimiento:


#!/usr/bin/env python3

from datetime import datetime # Importamos el tiempo actual

nacimiento = numeros # Define el año en que naciste 

fecha = datetime.now()

ahora = fecha.year

vida = ahora - nacimiento

print ("A tus ", vida, "años habas vivido", vida * 365 * 24,"horas")





Bien como vemos es un ejemplo,para saber la fecha exacta debemos definir el mes y dia y hora,luego hacer una operación de resta sobre estructuras selectivas para tener el dato exacto.

El hecho es que para hacer esto de nuevo con una nueva persona o un nuevo dato tendriamos que hacerlo de nuevo,o por lo menos definir la fecha nuevamente, vida y print:

Por ejemplo(les pongo en rojo todo lo que tendríamos que modificar) para añadir otra persona :


#!/usr/bin/env python3

from datetime import datetime # Importamos el tiempo actual

nacimiento1 = numeros # Define el año de la persona 1

nacimiento2 = numeros # Define el año de la persona 2


fecha = datetime.now()

ahora = fecha.year

vida1 = ahora - nacimiento1

vida2 = ahora - nacimiento2


print ("A tus ", vida1, "años habas vivido", vida1 * 365 * 24,"horas") # Imprime la persona 1

print ("A tus ", vida2, "años habas vivido", vida2 * 365 * 24,"horas") # Imprime la persona 2

Esto seria muy malo y muy mala practica porque para eso existen las funciones,asi que vamos a ver como son y como funcionan para reducir ese codigo o algoritmos de ese tipo a un codigo simple,limpio y funcional:



Para empezar las funciones en python se definen con def,de ingles defining tambien llevan parametros y el freno de la sintaxis se define por espacios,ya que en Perl,C o javascript la sintaxis para terminar una linea es punto y coma (;), aquí en python la estructura de funciones y de todo se define por espacios:

En C:

#include <stdio.h>


int main()
{
    printf ( "También escribo en C\n" );
    return 0;
}

En Perl:

#!/usr/bin/env perl

&hola("Hola","Mundo")

sub hola {

my ($h,$m) = @_;

print "Y en Perl :D\n";

print "$h $m\n";

}


Como podemos ver aqui los espacios de reconocimiento de terminacion de linea son definidos por (;),en python como dije son definidos por espacios,pero solo en funciones,clases,estructuras selectivas,bulces u otros operadores de datos de ese tipo,no en todo se deb usar espacios,como en C o Perl se usa (;) en casi todas las lineas:


Vamos a definir nuestra primera funcion:

#!/usr/bin/env python3

# Primera funcion

def primera(n,l): # Le pasamos dos argumentos
      print ("Argumento 1: ", l,"\nArgumento 2: ", n)

# Llamamos la funcion

primera(2,"Texto") # Le pasamos los dos datos


Lo voy a explicar mas detalladamente:

def primera(n,l):
def : # def se usa para comenzar una nueva función,seguida de esta debe ir el nombre de dicha función y termina con dos puntos (:) para indicar que comienza el contenido de nuestra funcion

primera # Es el nombre de nuestra primera funcion,podemos usar el que gustemos

(n,l) # Dentro de estos parentesis definiremos el nombre de los valores que le pasaremos cuando llamemos la funcion,estos valores/variables son locales,solo serán y tendran este valor dentro de la misma funcion.


primera(2,"Texto")
primera # Si escribimos el nombre de la función ya lejos de su alcance(fuera de los espacios) python la llama a escena,si le definimos parámetros estos se los tenemos que pasar o de otra manera tendríamos que definirlos en la misma función,en este caso n es igual a 2 y l es igual a Texto ya dentro de la función.

Bien sabiendo esto podemos realizar el código del principio de nuevo pero con funciones:

#!/usr/bin/env python3

from datetime import datetime

fecha = datetime.now() # Variables
ahora = fecha.year # Globales

def calcula(nacimiento):

    vida = ahora - nacimiento
    print ("A tus ", vida, "años habras vivido", vida * 365 * 24, "horas") 

calcula(numeros) # Numero de primer persona
calcula(numeros) # Numero de segunda persona
calcula(numeros) # Numero de tercer persona
# Etc

Igual que en todos los lenguajes manejo mis datos como salida estándar en la consola desde print,a menos que nesesite usar ese dato para otra cosa,por ejemplo si quiero ese dato pero no lo quiero imprimir no necesariamente tengo que usar print para que devuelva un numero puedo imprimirlo desde la llamada de la funcion o incluso guardar el resultado en una variable:

Todo esto se logra con return que maneja la llamada de la función como el dato que regresa:

Por ejemplo necesitamos saber las horas pero necesitamos también multiplicarlos por los minutos:

#!/usr/bin/env python3

from datetime import datetime

fecha = datetime.now()

ahora = fecha.year    

def calcula(nacimiento):

    vida = ahora - nacimiento

    return vida * 365 * 24 # Ahora estamos regresando un valor al llamar a la funcion

persona1 = calcula(1990) # Convertimos el regreso de la funcion llamada en una variable
persona2 = calcula(1980) # Convertimos el regreso de la función llamada en una variable

print ("Dias vividos de la persona1 : ", persona1, "en minutos: ", persona1 * 60)
print ("Dias vividos de la persona1 : ", persona2, "en minutos: ", persona2 * 60)

De momento eso es todo,en la próxima parte hablaremos del alcance de las variables,usar diccionarios o listas en las funciones,definir variables desde funciones y de *args & **kwargs.

No hay comentarios.:

Publicar un comentario

Los comentarios serán revisados antes de ser publicados.