apuntes:python
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionLast revisionBoth sides next revision | ||
apuntes:python [2017/09/21 16:13] – [GUI] Santiago Faci | apuntes:python [2019/06/11 20:40] – [SQLite] Santiago Faci | ||
---|---|---|---|
Line 105: | Line 105: | ||
<code bash> | <code bash> | ||
- | santi@zenbook: | + | santi@zenbook: |
+ | </ | ||
+ | |||
+ | También es posible ejecutar los scripts de //Python// directamente desde la línea de comandos. Simplemente tenemos que poner la línea ''# | ||
+ | |||
+ | <file python hello.py> | ||
+ | # | ||
+ | |||
+ | print(" | ||
+ | </ | ||
+ | |||
+ | Dándole permisos de ejecución (en el caso de sistemas Linux/OS X), podremos ejecutarlo directamente. | ||
+ | |||
+ | <code bash> | ||
+ | santi@zenbook: | ||
+ | santi@zenbook: | ||
+ | Hello! | ||
</ | </ | ||
Line 524: | Line 540: | ||
</ | </ | ||
+ | <code python> | ||
+ | . . . | ||
+ | if algopasa: | ||
+ | raise Exception(' | ||
+ | . . . | ||
+ | </ | ||
+ | |||
+ | <code python> | ||
+ | class MiExcepcion(Exception): | ||
+ | def __init__(self, | ||
+ | self.valor = valor | ||
+ | def __str__(self): | ||
+ | return repr(self.valor) | ||
+ | </ | ||
+ | |||
+ | <code python> | ||
+ | . . . | ||
+ | try: | ||
+ | raise MiExcepcion(' | ||
+ | except MiExcepcion as me: | ||
+ | print(" | ||
+ | . . . | ||
+ | </ | ||
===== Expresiones Regulares ===== | ===== Expresiones Regulares ===== | ||
Line 536: | Line 575: | ||
* Si un atributo comienza con un guión bajo ('' | * Si un atributo comienza con un guión bajo ('' | ||
* Si el atributo comienza con dos guiones bajos (''< | * Si el atributo comienza con dos guiones bajos (''< | ||
- | * No existe la sobreescritura | + | * No existe la sobrecarga |
<code python> | <code python> | ||
# Método con dos casos (simula la sobrecarga) | # Método con dos casos (simula la sobrecarga) | ||
Line 793: | Line 832: | ||
==== Leer ficheros de texto ==== | ==== Leer ficheros de texto ==== | ||
+ | |||
+ | En este apartado se muestran algunos ejemplos de operaciones habituales sobre ficheros de texto. | ||
+ | |||
+ | Extraer algo de información útil sobre el propio fichero (no el contenido): | ||
<code python> | <code python> | ||
Line 805: | Line 848: | ||
>>> | >>> | ||
</ | </ | ||
+ | |||
+ | Cómo leer un fichero de texto completo, con una sola línea de texto: | ||
<code python> | <code python> | ||
Line 814: | Line 859: | ||
'Este es el contenido del fichero' | 'Este es el contenido del fichero' | ||
</ | </ | ||
+ | |||
+ | En este caso podemos ver cómo es posible (y recomendable) utilizar la instrucción '' | ||
<code python> | <code python> | ||
Line 822: | Line 869: | ||
print(contenido) | print(contenido) | ||
</ | </ | ||
+ | |||
+ | También podemos, si la ocasión lo requiere, leer el fichero de texto línea a línea: | ||
<code python> | <code python> | ||
Line 831: | Line 880: | ||
==== Escribir ficheros de texto ==== | ==== Escribir ficheros de texto ==== | ||
+ | |||
+ | Aqui encontramos un par de ejemplos a la hora de escribir ficheros de texto. | ||
+ | |||
+ | Cómo escribir un fichero en modo escritura (**w**ritable), | ||
<code python> | <code python> | ||
Line 836: | Line 889: | ||
fichero.write(' | fichero.write(' | ||
</ | </ | ||
+ | |||
+ | En este otro caso en modo añadir (**a**ppend), | ||
<code python> | <code python> | ||
Line 964: | Line 1019: | ||
<code python> | <code python> | ||
- | import sqlite3 | ||
- | |||
- | conexion = sqlite3.connect(" | ||
- | 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 1057: | 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 '' | ||
+ | |||
+ | Por ejemplo, supongamos que tengo el módulo ' | ||
+ | |||
+ | <file python operaciones.py> | ||
+ | def siguiente(numero): | ||
+ | return numero + 1 | ||
+ | | ||
+ | def anterior(numero): | ||
+ | if (numero > 0): | ||
+ | numero -= 1 | ||
+ | return numero | ||
+ | </ | ||
+ | |||
+ | 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> | ||
+ | >>> | ||
+ | >>> | ||
+ | 4 | ||
+ | </ | ||
+ | |||
+ | Podemos importarlo y renombrarlo, | ||
+ | |||
+ | <code bash> | ||
+ | >>> | ||
+ | >>> | ||
+ | 4 | ||
+ | </ | ||
+ | |||
+ | También podemos importar todas las funciones del módulo y evitar tener que utilizar su nombre como prefjo antes de invocarlas: | ||
+ | |||
+ | <code bash> | ||
+ | >>> | ||
+ | >>> | ||
+ | 0 | ||
+ | </ | ||
+ | |||
+ | También podemos importar sólo algunas de sus funciones, y utilizarlas entonces sin usar el nombre del módulo como prefijo: | ||
+ | |||
+ | <code bash> | ||
+ | >>> | ||
+ | >>> | ||
+ | 4 | ||
+ | >>> | ||
+ | Traceback (most recent call last): | ||
+ | File "< | ||
+ | NameError: name ' | ||
+ | </ | ||
+ | |||
+ | 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 ''< | ||
+ | |||
+ | 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 '' | ||
+ | |||
+ | 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). | ||
+ | |||
+ | < | ||
+ | {{ python_package.png }} | ||
+ | < | ||
+ | |||
+ | Cada uno de los ficheros '' | ||
+ | |||
+ | <file python operaciones.py> | ||
+ | def sumar(numero1, | ||
+ | return numero1 + numero2 | ||
+ | |||
+ | def restar(numero1, | ||
+ | return numero1 - numero2 | ||
+ | |||
+ | def multiplicar(numero1, | ||
+ | return numero1 * numero2 | ||
+ | |||
+ | def dividir(numero1, | ||
+ | return numero1 / numero2 | ||
+ | |||
+ | def potencia(numero, | ||
+ | return numero ** exponente | ||
+ | </ | ||
+ | |||
+ | y de // | ||
+ | |||
+ | <file python operaciones.py> | ||
+ | import math | ||
+ | |||
+ | def seno(valor): | ||
+ | return math.sin(valor) | ||
+ | |||
+ | def coseno(valor): | ||
+ | return math.cos(valor) | ||
+ | |||
+ | def tangente(valor): | ||
+ | return math.tan(valor) | ||
+ | </ | ||
+ | |||
+ | Así, si desde fuera del paquete principal '' | ||
+ | |||
+ | <code python> | ||
+ | >>> | ||
+ | >>> | ||
+ | 7 | ||
+ | >>> | ||
+ | </ | ||
+ | |||
+ | 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 ===== | ||
+ | [[https:// | ||
+ | A continuación se muestra un ejemplo muy sencillo creado con esta librería. Para más información, | ||
<code python> | <code python> | ||
+ | # | ||
import tkinter as tk | import tkinter as tk | ||
apuntes/python.txt · Last modified: 2019/06/11 20:40 by Santiago Faci