jueves, 24 de enero de 2013

Tutorial modulos python 3 desde Unix

Esta es la parte 3 de los tutoriales de python 3.x sobre Unix

Se recomienda leer las partes anteriores:

Enlace

Los módulos son los archivos con extensión .py,.pyo,.pyc.

A diferencia de los módulos principales que son los .py que venimos viendo en estos tutoriales,estos archivos son lineas de ordenes que usan otras lineas de ordenes,osea módulos para scripts,aunque los dos tengan la misma extensión .py.

A lo que en Tiempo de Tux llamamos script otras web's les pueden decir módulos  pero en concreto son lineas de ordenes,algo que hace entender a las computadoras lo que queremos hacer.

Así que bueno, en esta ocasión vamos a aprender a usar y crear módulos para usarlos en nuestros script's.

Primero que nada debemos saber que son las funciones y como usarlas,en esta ocasión veremos las funciones muy por encima y en otra ocasión las fortaleceremos con mas conocimiento:

Funciones

Las funciones en python se definen con la llave especial def(Defining) seguida del nombre de la función y los argumentos,estos últimos encerrados en ():

def nombre_f (argumeto1, argumeto2):

Los argumentos son datos que le pasaremos a lo que este adentro de la función,desde el llamado de la función:

Adentro de la función pueden ir muchas cosas,desde print hasta algoritmos muy muy complicados que incluso usan/llaman otras funciones,por ejemplo print

def nombre_funcion (argumeto1, argumeto2):
print (argumeto1)
print (argumeto2)

Llamada de funciones:

Las funciones las llamamos cuando las necesitemos y como dije le pasamos el argumento,los argumentos son parametros que trabajaremos desde la misma función,estos parámetro o argumentos los creamos desde ahi mismo o desviamos una variable ya creada:

nombre_funcion(“Argumento 1”, “Argumeto 2”)  # Para llamar las funciones solo basta escribir su nombre

Y también enviar los argumentos (si usamos o necesitamos tales)

Script de ejemplo:

#!/usr/bin/env python3

def nombre_f (argumeto1, argumeto2):
print (argumeto1)
nombre_f(“Argumento 1”, “Argumeto 2”)

Como dije le podemos pasar argumentos, si lo necesitamos,por ejemplo tenemos definidos un nombre y un apellido y queremos imprimirlos desde la función,solo haríamos esto:

#!/usr/bin/env python3


nombre = "Damian"
apellido = "Rivera"


def unir(nombre,apelido):
       print ("Me llamo :", nombre, apellido)


unir(nombre,apellido)

También cabe destacar que en la llave def después del nombre de la función podemos asignarle un descriptor(nuevo nombre) a nuestro argumento que deseamos trabajar:

Por ejemplo la variable global se llama "nombre" pero podemos asignarle un descriptor nuevo para poder trabajar con el en la llave def:


#!/usr/bin/env python3


nombre = "Damian" # Variables-
apellido = "Rivera" # Globales


def unir(n,a): # Transformamos las variables a n y a

       print ("Me llamo :", n, a) #Aquí ya podemos usar el descriptor


unir(nombre,apellido) # Aquí le pasamos las variables globales


Del mismo modo podemos hacer operaciones aritméticas

Enlace 


También podemos llamar funciones desde otras funciones y usar los mismos nombres para las variables locales:

Enlace



Módulos

Los módulos son otros scripts o lineas de ordenes que importamos para poderlos usar en nuestro script principal,primero que nada se tiene que hacer la importación con la llave import seguido del nombre del modulo, por ejemplo:

import os

Los módulos contienen funciones las cuales llamamos con un punto (.),

os.uname() # Aquí estamos llamando la función de os que devuelve nuestro logname

Ya que debajo de os,puede haber uname,getlogin,getcwd,etc como vimos en el script, y para llamarlos solo debemos colocar un (.), también hay que tener en cuenta que aveces la salida del comando no es una simple variable,puede ser una lista o algo mas complejo y se debe manejar como es:

Si es una lista, por ejemplo uname de os:

#!/usr/bin/env python3

import os 

sistema = os.uname() 

print ("Argumentos en la lista :", sistema[:]) 

print ("Primer argumento:", sistema[0])




En ese caso estamos importando el modulo os y estamos pidiendo la función uname,la cual devuelve una lista.

Existen muchos módulos para python,no se si se compare con CPAN de Perl pero hay muchos,bien comenzemos:

Los módulos que usen como por ejemplo Gtk o Qt tienen su propia API asi que no les puedo explicar como usarlos ya que es mucha documentación y solamente se usan como uname de os,solo que aun grado mas alto.

Pero vamos a crear nuestros propios modulos,primero que nada vamos a crear una carpeta y dos archivos de texto para el ejemplo:

Como somos Unixeros,o por lo menos yo,abran una consola y metan este pipe:

mkdir mmdulos; cd mmdulos; touch mi_modulo.py && touch mi_script.py; clear; echo "Tenemos `ls  | wc -l` archivos: "; ls


(mmdulos es mis módulos :P)




Ahora vamos a crear unas funciones para mi_modulo.py con lo que aprendimos en esta entrada y el enlace de abajo:

Enlace
Mete esto en mi_modulo.py

Desde la termina puedes usar

gedit mi_modulo.py

Y mete esto:


#!/usr/bin/env python3

def mayus(p1): # Función que convierte a mayúsculas
     print (str.upper(p1))

def minus(p1):
     print (str.lower(p1)) # Función que convierte en minúsculas


Lo explico,estamos creando dos funciones una que convierte en mayúsculas y otra que convierte en minúsculas las cadenas de texto(es raro porque estas ya pertenecen a una función del sistema,pero es un ejemplo)

Ahora en  mi_script.py mete esto:

#!/usr/bin/env python3

import mi_modulo # Llamaos el modulo que creamos

hola = "hola" # Definimos una variable para probar

print ("La funcion mayus convierte:", hola, "en :")

mi_modulo.mayus(hola) # La convertimos :D


Y ejecutamos  mi_script.py

Como se dan cuenta si son programadores,ya experimentados no uso return,algo fundamental de una función esto lo hago porque las salidas de las funciones las manejo desde las mismas,no las trabajo desde otro lugar,por ejemplo:


def mayus(p1): # Función que convierte a mayúsculas
     print (str.upper(p1))


imprime la cadena por lo cual no es necesario hacer en el script:

print (mi_modulo.mayus(hola))

Porque es un ejemplo,ya que así es como manejo return:

Borramos lo que hemos escrito en los dos archivos:

En la consola


cat /dev/null > mi_modulo.py > mi_script.py

Y metemos en mi_modulo.py :



#!/usr/bin/env python3

def mayus(p1): # Función que convierte a mayusculas
     return (str.upper(p1)) # Regresa la cadena convertida

def minus(p1):
     return (str.lower(p1)) # Funcion que convierte en minusculas



Y en mi_script.py:



#!/usr/bin/env python3

import mi_modulo

hola = "hola"

print ("La funcion mayus convierte:", hola, "en : ")

mi_modulo.mayus(hola)) # No imprime nada


print (mi_modulo.mayus(hola) # Adivinen, si imprime


# De hecho podemos usar su información para trabajarla de otra forma:

cadena = mi_modulo.mayus(hola)

print (cadena.replace("O","I")



Con la llave return, podemos manejar la salida como un dato y podemos trabajarla,pero no es necesario en todas las funciones si estas tienen su propia salida.

Eso es todo,les dejo un poco mas de documentación(muy buena) de pycartagena:


Enlace

No hay comentarios.:

Publicar un comentario

Los comentarios serán revisados antes de ser publicados.