User Tools

Site Tools


apuntes:python

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
apuntes:python [2017/09/21 22:52] – [Paquetes] Santiago Faciapuntes:python [2019/06/11 20:40] (current) – [GUI] Santiago Faci
Line 575: Line 575:
     * Si un atributo comienza con un guión bajo (''_velocidad'') se considera como protegido (//protected//)     * Si un atributo comienza con un guión bajo (''_velocidad'') se considera como protegido (//protected//)
     * Si el atributo comienza con dos guiones bajos (''<nowiki>__</nowiki>velocidad'') se le considera como privado (//private//     * Si el atributo comienza con dos guiones bajos (''<nowiki>__</nowiki>velocidad'') se le considera como privado (//private//
-  * No existe la sobreescritura de métodos como tal por lo que tendremos que optar por crear un método con parámetros opcionales y decidir qué hacer dentro del mismo:+  * No existe la sobrecarga de métodos como tal por lo que tendremos que optar por crear un método con parámetros opcionales y decidir qué hacer dentro del mismo:
 <code python> <code python>
 # Método con dos casos (simula la sobrecarga) # Método con dos casos (simula la sobrecarga)
Line 1019: Line 1019:
  
 <code python> <code python>
-import sqlite3 
- 
-conexion = sqlite3.connect("datos.db") 
-cursor = conexion.cursor() 
- 
 # Ejemplo que muestra como conectar y crear  # Ejemplo que muestra como conectar y crear 
 # una Base de Datos SQLite # una Base de Datos SQLite
Line 1112: Line 1107:
 ==== Módulos ==== ==== Módulos ====
  
 +La programación modular o basada en módulos consiste en dividir una aplicación en varias partes independientes (módulos), capaces de funcionar por separados, pero que juntas funcionan como una sola. La principal idea sobre la programación modular es la de poder crear un código legible, ordenado y que se puedan mantener.
 +
 +Además, disponer de nuestra aplicación programada en módulos, permite que podamos reutilizar esos módulos para construir otras, reutilizando de esa manera nuestro código. Incluso podemos desarrollar librerías simplemente para que otros puedan apoyarse (importando los módulos) en ellas para construir sus aplicaciones.
 +
 +En Python, un módulo es cualquer fichero con extensión .py (fichero de código) con código que pueda ser reutilizado (clases, funciones, . . .).
 +
 +La forma de utilizar esos módulos es utilizando la palabra reservada ''import'' acompañada del nombre del módulo que queremos utilizar en nuestra aplicación.
 +
 +Por ejemplo, supongamos que tengo el módulo 'operaciones.py':
 +
 +<file python operaciones.py>
 +def siguiente(numero):
 +    return numero + 1
 +    
 +def anterior(numero):
 +    if (numero > 0):
 +        numero -= 1
 +    return numero
 +</file>
 +
 +Y ahora quiero importar ese módulo para utilizar algunas de sus funciones. Hay varias posibilidades:
 +
 +Importar el módulo sin más, de forma que tendremos que escribir su nombre cuando queramos utilizar sus funciones:
 +
 +<code bash>
 +>>> import operaciones
 +>>> operaciones.siguiente(3)
 +4
 +</code>
 +
 +Podemos importarlo y renombrarlo, de forma que podremos utilizar el nuevo nombre cuando queramos utilizar sus funciones:
 +
 +<code bash>
 +>>> import operaciones as ops
 +>>> ops.siguiente(3)
 +4
 +</code>
 +
 +También podemos importar todas las funciones del módulo y evitar tener que utilizar su nombre como prefjo antes de invocarlas:
 +
 +<code bash>
 +>>> from operaciones import *
 +>>> anterior(0)
 +0
 +</code>
 +
 +También podemos importar sólo algunas de sus funciones, y utilizarlas entonces sin usar el nombre del módulo como prefijo:
 +
 +<code bash>
 +>>> from operaciones import siguiente
 +>>> siguiente(3)
 +4
 +>>> anterior(1)
 +Traceback (most recent call last):
 +  File "<stdin>", line 1, in <module>
 +NameError: name 'anterior' is not defined
 +</code>
 +
 +Realmente la opción mas aconsejable es importar el paquete tal cual aunque ello nos obligue a escribir su nombre a modo de prefijo cada vez que invoquemos a alguna de sus funciones. En proyectos muy grandes a veces interesa saber de donde salen las funciones y de esa manera podremos distinguir claramente nuestro código del de los módulos que hayamos importado. En ocasiones puede ser recomendable un renombrado del módulo para aquellos que tengan un nombre largo o incómodo de escribir, pero siempre utilizando un segundo nombre que sea lo suficientemente descriptivo como para que sepamos a que módulo se refiere.
 ==== Paquetes ==== ==== Paquetes ====
 +
 +En el punto anterior hemos visto que podemos organizar el código en módulos. En Python un módulo es un fichero que contiene código que podremos reutilizar importándolo. En el caso de que tengamos varios módulos y queramos organizarlos todos juntos estaremos hablando de un **paquete**.
 +
 +Utilizar paquetes es la forma en la que podremos organizar nuestros proyectos más grandes en Python. Puesto que podemos almacenar varios módulos en cada paquete, podemos estructurar más todavía nuestro código evitando asi tener módulos demasiado grandes.
 +
 +En Python un paquete es cualquier carpeta que contenga en su interior un fichero vacío con el nombre ''<nowiki>__init__</nowiki>.py''. Todos los módulos que aparezcan en esa carpeta formarán parte de ese paquete, cuyo nombre será el nombre de la carpeta.
 +
 +Al final, la forma de importar los módulos de cada paquete es la misma que la que hemos usado en el apartado anterior a la hora de importar módulos por separado. Ahora, simplemente tendremos que utiliar el nombre del paquete delante del módulo de la forma ''import paquete.modulo''.
 +
 +Imaginemos que tenemos el siguiente paquete, compuesto a su vez de dos paquetes. Cada uno de estos dos paquetes tiene un módulo con varias funciones cada uno (podrían contener más de un módulo y la forma de trabajar con ellos sería la misma).
  
 <figure> <figure>
 {{ python_package.png }} {{ python_package.png }}
 <caption>Estructura del paquete calculadora</caption></figure> <caption>Estructura del paquete calculadora</caption></figure>
 +
 +Cada uno de los ficheros ''operaciones.py'' (se llaman igual pero no es necesario) contiene una serie de funciones, //basicas// por un lado:
  
 <file python operaciones.py> <file python operaciones.py>
Line 1134: Line 1200:
     return numero ** exponente     return numero ** exponente
 </file> </file>
 +
 +y de //funciones// por otro:
  
 <file python operaciones.py> <file python operaciones.py>
Line 1147: Line 1215:
     return math.tan(valor)     return math.tan(valor)
 </file> </file>
 +
 +Así, si desde fuera del paquete principal ''calculadora'', queremos importar cualquiera de los módulos, procederemos de la siguiente forma:
  
 <code python> <code python>
Line 1155: Line 1225:
 </code> </code>
  
 +Y a partir de ahi podemos importar los módulos de las diferentes formas que hemos visto en el apartado anterior sobre los mismos.
 ===== GUI ===== ===== GUI =====
  
Line 1172: Line 1243:
  
     def __crearVentana(self):     def __crearVentana(self):
- 
         self.__tfTexto = tk.Text(self, width=20, height=1)         self.__tfTexto = tk.Text(self, width=20, height=1)
         self.__tfTexto.grid()         self.__tfTexto.grid()
apuntes/python.1506034331.txt.gz · Last modified: 2019/01/04 13:22 (external edit)