Encuentro13 Sincronico

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 35

Programación I

Encuentro 12 Sincrónico
Prof. Guillermo Oliva
¿Cómo saber dónde estás?

A veces, puede ser necesario encontrar información no relacionada con Python.


Por ejemplo, es posible que necesites conocer la ubicación de tu programa dentro
del entorno de la computadora.
Imagina el entorno de tu programa como una pirámide que consta de varias capas
o plataformas.
¿Cómo saber dónde estás?

Las capas son:


• El código (en ejecución) se encuentra en la parte superior.
• Python (mejor dicho, su entorno de ejecución) se encuentra directamente debajo de él.
• La siguiente capa de la pirámide se llena con el SO (sistema operativo): el entorno de
Python proporciona algunas de sus funcionalidades utilizando los servicios del sistema
operativo. Python, aunque es muy potente, no es omnipotente: se ve obligado a usar
muchos ayudantes si va a procesar archivos o comunicarse con dispositivos físicos.
• La capa más inferior es el hardware: el procesador (o procesadores), las interfaces de
red, los dispositivos de interfaz humana (ratones, teclados, etc.) y toda otra maquinaria
necesaria para hacer funcionar la computadora: el sistema operativo sabe cómo
emplearlos y utiliza muchos trucos para trabajar con todas las partes en un ritmo
constante.
¿Cómo saber dónde estás?

Esto significa que algunas de las acciones del programa tienen que recorrer un largo
camino para ejecutarse con éxito, imagina que:
• Tu código quiere crear un archivo, por lo que invoca una de las funciones de Python.
• Python acepta la orden, la reorganiza para cumplir con los requisitos del sistema
operativo local (es como poner el sello "aprobado" en una solicitud) y lo envía.
• El SO comprueba si la solicitud es razonable y válida (por ejemplo, si el nombre del
archivo se ajusta a algunas reglas de sintaxis) e intenta crear el archivo. Tal operación,
aparentemente es muy simple, no es atómica: consiste de muchos pasos menores
tomados por...
• El hardware, el cual es responsable de activar los dispositivos de almacenamiento (disco
duro, dispositivos de estado sólido, etc.) para satisfacer las necesidades del sistema
operativo.
¿Cómo saber dónde estás?

Por lo general, no eres consciente de todo ese alboroto: quieres que se cree el archivo y
eso es todo.
Pero a veces quieres saber más, por ejemplo, el nombre del sistema operativo que aloja
Python y algunas características que describen el hardware que aloja el sistema operativo.
Hay un módulo que proporciona algunos medios para permitir saber dónde se encuentra y
qué componentes funcionan. El módulo se llama platform. Veamos algunas de las
funciones que brinda.
Funciones seleccionadas del módulo platform

El módulo platform permite acceder a los datos de la plataforma subyacente, es


decir, hardware, sistema operativo e información sobre la versión del intérprete.
Existe también una función que puede mostrar todas las capas subyacentes en un solo
vistazo, llamada platform. Simplemente devuelve una cadena que describe el
entorno; por lo tanto, su salida está más dirigida a los humanos que al procesamiento
automatizado (lo veremos pronto).

Así es como se puede invocar:


platform(aliased = False, terse = False).
Funciones seleccionadas del módulo platform

Ahora:

• aliased → cuando se establece a True (o cualquier valor distinto de cero)


puede hacer que la función presente los nombres de capa subyacentes
alternativos en lugar de los comunes.

• terse → cuando se establece a True (o cualquier valor distinto de cero)


puede convencer a la función de presentar una forma más breve del
resultado (si lo fuera posible).
Funciones seleccionadas del módulo platform

Ejecutamos el programa usando tres plataformas diferentes: esto es lo que se obtuvo:

Intel x86 + Windows ® Vista (32 bit):

Windows-Vista-6.0.6002-SP2

Windows-Vista-6.0.6002-SP2

Windows-Vista

Intel x86 + Gentoo Linux (64 bit):

Linux-3.18.62-g6-x86_64-Intel-R-_Core-TM-_i3-2330M_CPU_@_2.20GHz-with-gentoo-2.3

Linux-3.18.62-g6-x86_64-Intel-R-_Core-TM-_i3-2330M_CPU_@_2.20GHz-with-gentoo-2.3

Linux-3.18.62-g6-x86_64-Intel-R-_Core-TM-_i3-2330M_CPU_@_2.20GHz-with-glibc2.3.4
Funciones seleccionadas del módulo platform

Ejecutamos el programa usando tres plataformas diferentes: esto es lo que se


obtuvo:

Raspberry PI2 + Raspbian Linux (32 bit):

Linux-4.4.0-1-rpi2-armv7l-with-debian-9.0

Linux-4.4.0-1-rpi2-armv7l-with-debian-9.0

Linux-4.4.0-1-rpi2-armv7l-with-glibc2.9
Funciones seleccionadas del módulo platform

También puedes ejecutar el programa en el IDLE de tu máquina local para verificar qué
salida tendrá.
Funciones seleccionadas del módulo platform

A veces, es posible que solo se desee conocer el nombre genérico del procesador
que ejecuta el sistema operativo junto con Python y el código, una función llamada
machine() te lo dirá. Como anteriormente, la función devuelve una cadena.
Funciones seleccionadas del módulo platform

La función processor() devuelve una cadena con el nombre real del procesador (si
lo fuese posible).
Funciones seleccionadas del módulo platform

Una función llamada system() devuelve el nombre genérico del sistema operativo
en una cadena.
Funciones seleccionadas del módulo platform

La versión del sistema operativo se proporciona como una cadena por la función
version().
Ejecuta el código y verifica su salida.
Funciones seleccionadas del módulo platform

Si necesitas saber qué versión de Python está ejecutando tu código, puedes


verificarlo utilizando una serie de funciones dedicadas, aquí hay dos de ellas:

python_implementation() → devuelve una cadena que denota la implementación


de Python (espera CPython aquí, a menos que decidas utilizar cualquier rama de
Python no canónica).

python_version_tuple() → devuelve una tupla de tres elementos la cual contiene:


la parte mayor de la versión de Python.
la parte menor,
el número de nivel del patch.
Funciones seleccionadas del módulo platform
Funciones seleccionadas del módulo platform

Aquí solo hemos cubierto los conceptos básicos de los módulos de Python. Los módulos de Python
conforman su propio universo, en el que Python es solo una galaxia, y nos aventuraríamos a decir que
explorar las profundidades de estos módulos puede llevar mucho más tiempo que familiarizarse con
Python "puro".
Además, la comunidad de Python en todo el mundo crea y mantiene cientos de módulos adicionales
utilizados en aplicaciones muy específicas como la genética, la psicología o incluso la astrología.
Estos módulos no están (y no serán) distribuidos junto con Python, o a través de canales oficiales, lo que
hace que el universo de Python sea más amplio, casi infinito.
Puedes leer sobre todos los módulos estándar de Python aquí: https://docs.python.org/3/py-
modindex.html.
No te preocupes, no necesitarás todos estos módulos. Muchos de ellos son muy específicos.
Todo lo que se necesita hacer es encontrar los módulos que se desean y aprender a cómo usarlos. Es fácil.
¿Qué es un paquete?

Escribir tus propios módulos no difiere mucho de escribir scripts comunes.


Existen algunos aspectos específicos que se deben tomar en cuenta, pero
definitivamente no es algo complicado. Lo verás pronto.
¿Qué es un paquete?

Resumamos algunos aspectos importantes:


Un módulo es un contenedor lleno de funciones - puedes empaquetar tantas
funciones como desees en un módulo y distribuirlo por todo el mundo.

Por supuesto, no es una buena idea mezclar funciones con diferentes áreas de
aplicación dentro de un módulo (al igual que en una biblioteca: nadie espera que
los trabajos científicos se incluyan entre los cómics), así que se deben agrupar las
funciones cuidadosamente y asignar un nombre claro e intuitivo al módulo que las
contiene (por ejemplo, no le des el nombre videojuegos a un módulo que
contiene funciones destinadas a particionar y formatear discos duros).
¿Qué es un paquete?

Crear muchos módulos puede causar desorden: tarde o temprano querrás agrupar
tus módulos de la misma manera que previamente has agrupado funciones: ¿Existe
un contenedor más general que un módulo?.

Sí lo hay, es un paquete: en el mundo de los módulos, un paquete juega un papel


similar al de una carpeta o directorio en el mundo de los archivos.
¿Qué es un paquete?

En esta sección, trabajarás localmente en tu máquina. Comencemos desde cero, de


la siguiente manera:
¿Qué es un paquete?

Se necesitan dos archivos para realizar estos experimentos. Uno de ellos será el módulo
en sí. Está vacío ahora. No te preocupes, lo vas a llenar con el código real.
El archivo lleva por nombre module.py. No muy creativo, pero es simple y claro.

El segundo archivo contiene el código usando el nuevo módulo. Su nombre


es main.py.
Su contenido es muy breve hasta ahora:
¿Qué es un paquete?

Ambos archivos deben estar ubicados en la misma carpeta. Te recomendamos


crear una carpeta nueva y vacía para ambos archivos. Esto hará que las cosas sean
más fáciles.
Inicia el IDLE y ejecuta el archivo main.py.¿Que ves?
¿Qué es un paquete?

No deberías ver nada. Esto significa que Python ha importado con éxito el
contenido del archivo module.py. No importa que el módulo esté vacío por ahora.
El primer paso ya está hecho, pero antes de dar el siguiente paso, queremos que
eches un vistazo a la carpeta en la que se encuentran ambos archivos.
¿Notas algo interesante?

Ha aparecido una nueva subcarpeta, ¿puedes verla? Su nombre


es __pycache__. Echa un vistazo adentro. ¿Que ves?
¿Qué es un paquete?

Hay un archivo llamado (más o menos) module.cpython-


xy.pyc donde x y y son dígitos derivados de tu versión de Python (por ejemplo,
serán 3 y 4 si utilizas Python 3.4).

El nombre del archivo es el mismo que el de tu módulo. La parte posterior al


primer punto dice qué implementación de Python ha creado el archivo (CPython)
y su número de versión. La ultima parte (pyc) viene de las
palabras Python y compilado.
¿Qué es un paquete?

Puedes mirar dentro del archivo: el contenido es completamente ilegible para los
humanos. Tiene que ser así, ya que el archivo está destinado solo para uso de
Python.
Cuando Python importa un módulo por primera vez, traduce el contenido a una
forma "semi" compilada. El archivo no contiene código en lenguaje máquina:
es código semi-compilado interno de Python, listo para ser ejecutado por el
intérprete de Python. Como tal archivo no requiere tantas comprobaciones como
las de un archivo fuente, la ejecución comienza más rápido y también se ejecuta
más rápido.
¿Qué es un paquete?

Gracias a eso, cada importación posterior será más rápida que interpretar el código
fuente desde cero.
Python puede verificar si el archivo fuente del módulo ha sido modificado (en este
caso, el archivo pyc será reconstruido) o no (cuando el archivo pyc pueda ser
ejecutado al instante). Este proceso es completamente automático y transparente,
no se tiene que estar tomando en cuenta.
¿Qué es un paquete?

Ahora hemos puesto algo en el archivo del módulo:


¿Qué es un paquete?

¿Puedes notar alguna diferencia entre un módulo y un script ordinario? No hay


ninguna hasta ahora.
Es posible ejecutar este archivo como cualquier otro script. Pruébalo por ti mismo.
¿Que es lo que pasa? Deberías de ver la siguiente línea dentro de tu consola:
Me gusta ser un módulo.
¿Qué es un paquete?

¿Qué significa realmente?


Cuando un módulo es importado, su contenido es ejecutado implícitamente por
Python. Le da al módulo la oportunidad de inicializar algunos de sus aspectos
internos (por ejemplo, puede asignar a algunas variables valores útiles).
Nota: la inicialización se realiza solo una vez, cuando se produce la primera
importación, por lo que las asignaciones realizadas por el módulo no se repiten
innecesariamente.
¿Qué es un paquete?

Imagina el siguiente contexto:


Existe un módulo llamado mod1.
Existe un módulo llamado mod2 el cual contiene la instrucción import mod1.
Hay un archivo principal que contiene las instrucciones import mod1 y import
mod2.
A primera vista, se puede pensar que mod1 será importado dos veces -
afortunadamente, solo se produce la primera importación. Python recuerda los
módulos importados y omite silenciosamente todas las importaciones posteriores.
¿Qué es un paquete?

Python puede hacer mucho más. También crea una variable llamada __name__.
Además, cada archivo fuente usa su propia versión separada de la variable, no se
comparte entre módulos.
Te mostraremos cómo usarlo. Modifica el módulo un poco:
¿Qué es un paquete?

Ahora ejecuta el archivo module.py. Deberías ver las siguientes líneas:


Me gusta ser un módulo.
__main__

Ahora ejecuta el archivo main.py. ¿Y? ¿Ves lo mismo que nosotros?


Me gusta ser un módulo.
module
¿Qué es un paquete?

Podemos decir que:

Cuando se ejecuta un archivo directamente, su variable __name__ se establece


a __main__.

Cuando un archivo se importa como un módulo, su variable __name__ se


establece al nombre del archivo (excluyendo a .py).
Programación I
Encuentro 12 Sincrónico
Prof. Guillermo Oliva

También podría gustarte