curso python basico



Módulos en python


Un modulo es un archivo que contiene variables, funciones, clases, objetos e incluso programas principales, que permiten organizar el código de un programa de una manera más inteligible.
  • Ejemplo: En un archivo llamado new_func.py, está la siguiente definición de función
    def Multi( arg1=0, arg2=0 , *vartuple ):
       "Multiplica todos los argumentos"
       produc=arg1*arg2
     
       for var in vartuple:
          produc=produc*var
       return produc

La palabra reservada import

Se puede usar cualquier código hecho en python como módulo, haciendo un import desde otro código, script o programa en pyton. esto es import modulo.

Cuando el interprete se encuentra la palabra import, importa dicho modulo o módulos desde los directorios de búsqueda por defecto.
  • Ejemplo: Si se tiene el archivo func.py donde está definida la función Multi, esta se puede importar desde otro script, para ser usada
    # Se importa el modulo new_func
    import new_func
    
    # Ahora se puede usar el código dentro de ese módulo en el nuevo programa
    new_func.Multi(2,3,4,5,6)

La palabra reservada from...import

Esta expresión es usada cuando de determinado módulo solo se necesita algunas de los elementos que contiene.
  • Ejemplo: En el módulo new_func está la función fibo, dicha función recibe un entero n, y entrega una lista con los números de la serie de Fibonacci menores que n. Se quiere hacer un programa que sume los números Fibonacci menores que el número 100. Ahora new_func.py luce así:
    def Multi( arg1=0, arg2=0 , *vartuple ):
        "Multiplica todos los argumentos"
        produc=arg1*arg2
    
        for var in vartuple:
           produc=produc*var
        
        return produc
        
        
    def fib(n):
        "Recibe un entero n, y entrega una lista con los números de fibonacci menores que n"
        result = []
        a, b = 0, 1
        while b < n:
            result.append(b)
            a, b = b, a+b
        return result

    y el script que resuelve el problema es
    from new_func import fib #Se importa la función fib desde el modulo new_func
    
    serie=fib(100)  #La variable serie se llena con la serie de fibonacci hasta antes de 100
    
    sum=0
    for i in a:
         sum=sum+i
    
    print('la suma de los números de Fibonacci menores que 100 es:',sum)

Hay que notar que al usar "from...import" no se importa ningún otro item (objeto, variable, función...) desde el módulo new_func, y también hay que tener en cuenta que la función "fibo" se llama directamente y no por medio del operador "."(punto).

La palabra reservada from...import*

Otro uso de "from...import" es el de importar todos los elementos de determinado módulo. Si se usa de esta manera, todos los elementos del módulo se van a cargar al programa y se podrán llamar directamente.
  • Ejemplo: El archivo new_func.py
    def Multi( arg1=0, arg2=0 , *vartuple ):
        "Multiplica todos los argumentos"
        produc=arg1*arg2
    
        for var in vartuple:
           produc=produc*var
        
        return produc
        
        
    def fib(n):
        "Recibe un entero n, y entrega una lista con los números de fibonacci menores que n"
        result = []
        a, b = 0, 1
        while b < n:
            result.append(b)
            a, b = b, a+b
        return result
        
    
    def SumLis(list):
        sum=0
        for i in list:
            sum=sum + i
            
        return sum

    Y el código que resuelve el problema del ejemplo anterior es:
    #Importo el módulo
    from new_func import *
    
    a=fib(100)   #Se le asigna a "a" una lista con los números de fibonacci menores que 100.
    
    b=SumLis(a)   #Uso la función SumLis para sumar las componentes de la lista a, y se las asigno a b
    
    print("La suma es:" , b)

Ejecutar módulos como un script


Si un código se ejecuta como un modulo, el nombre de este está disponible en la variable global __name__ . Pero si este se ejecuta directamente entonces ésta variable tendrá el valor __name__ = "__main__" . Así si se quiere que el módulo ejecute algunas acciones al ser llamado como script, entonces se ponen dichas acciones después de un condicional.
  • Ejemplo: Anexamos algunas lineas a new_func.py para que al ser llamado como programa, ejecute unas acciones mas.
    def Multi( arg1=0, arg2=0 , *vartuple ):
        "Multiplica todos los argumentos"
        produc=arg1*arg2
    
        for var in vartuple:
           produc=produc*var
        
        return produc
        
        
    def fib(n):
        "Recibe un entero n, y entrega una lista con los números de fibonacci menores que n"
        result = []
        a, b = 0, 1
        while b < n:
            result.append(b)
            a, b = b, a+b
        return result
        
    
    def SumLis(list):
        sum=0
        for i in list:
            sum=sum + i
            
        return sum
        
        
    if __name__ == "__main__":
        a=fib(200)
        print('Serie de Fibonacci hasta el termino exactamente menor que 200: ',a)
        b=SumLis(a)
        print('Suma de los términos de esta serie: ',b)


La variable PYTHONPATH

PYTHONPATH variable de ambiente, que consiste de una lista de directorios, que es donde python busca los modulos que se le piden importar.

El PYTHONPATH para Windows:

set PYTHONPATH=c:\python34\lib;

Y PYTHONPATH para UNIX:

set PYTHONPATH=/usr/local/lib/python