Mientras aprendía programación y leía algunos recursos, se habría encontrado con la palabra "abstracción", que simplemente significa reducir y reutilizar el código tanto como sea posible.
Las funciones y los módulos facilitan la abstracción. Creas funciones cuando quieres hacer algo repetidamente dentro de un archivo.
Los módulos entran en escena cuando desea reutilizar un grupo de funciones en diferentes archivos fuente. Los módulos también son útiles para estructurar bien el programa.
- Uso de bibliotecas estándar y otros módulos de terceros
- Estructurando el programa
Usar bibliotecas estándar
Ejemplo: puede leer sobre los métodos / funciones de todas las bibliotecas estándar en los documentos oficiales de Python en detalle.
import time for i in range(100): time.sleep(1) # Waits for 1 second and then executes the next command print(str(i) + ' seconds have passed') # prints the number of seconds passed after the program was started

Ejecutar código
# To calculate the execution time of a part of program import time start = time.time() # code here end = time.time() print('Execution time:' , end-start)

Ejecutar código
# Using math Module import math print(math.sqrt(100)) # prints 10

Ejecutar código
Usar módulos de terceros
Los módulos de terceros no vienen incluidos con Python, pero tenemos que instalarlo externamente usando administradores de paquetes como pip
yeasy install
# To make http requests import requests rq = requests.get(target_url) print(rq.status_code)
Obtenga más información sobre el módulo de solicitudes de python aquí
Estructurar programas
Queremos hacer un programa que tenga varias funciones con respecto a los números primos. Así que comencemos. Definiremos todas las funciones enprime_functions.py
# prime_functions.py from math import ceil, sqrt def isPrime(a): if a == 2: return True elif a % 2 == 0: return False else: for i in range(3,ceil(sqrt(a)) + 1,2): if a % i == 0: return False return True def print_n_primes(a): i = 0 m = 2 while True: if isPrime(m) ==True: print(m) i += 1 m += 1 if i == a: break
Ahora queremos usar las funciones que acabamos de crear, prime_functions.py
así que creamos un nuevo archivo playground.py
para usar esas funciones.
Tenga en cuenta que este programa es demasiado simple para crear dos archivos separados, es solo una demostración. Pero cuando hay programas grandes y complejos, hacer diferentes archivos es realmente útil.
# playground.py import prime_functions print(prime_functions.isPrime(29)) # returns True
Clasificación de importaciones
Una buena práctica es clasificar los import
módulos en tres grupos: importaciones de bibliotecas estándar, importaciones de terceros relacionadas e importaciones locales. Dentro de cada grupo, es conveniente ordenar alfabéticamente por nombre de módulo. Puede encontrar más información en PEP8.
Una de las cosas más importantes para el lenguaje Python es la legibilidad, y los módulos ordenados alfabéticamente son más rápidos de leer y buscar. Además, es más fácil verificar que algo se importa y evitar importaciones duplicadas.
Desde X importar Y: un ejemplo
Aquí hay un problema de ejemplo:
>>> from math import ceil, sqrt >>> # here it would be >>> sqrt(36) <<< 6

Ejecutar código
O podríamos usar este en su lugar:
>>> import math >>> # here it would be >>> math.sqrt(36) <<< 6

Ejecutar código
Entonces nuestro código se vería como en math.sqrt(x)
lugar de sqrt(x)
. Esto sucede porque cuando usamos import x
, x
se crea un espacio de nombres para evitar conflictos de nombres. Tienes que acceder a cada objeto del módulo como x.
.
Pero cuando usamos from x import y
aceptamos agregar y
al espacio de nombres global principal. Entonces, al usar esto, debemos asegurarnos de que no tengamos un objeto con el mismo nombre en nuestro programa.
Nunca lo use from x import y
si un objeto nombrado y
ya existe
Por ejemplo, en el os
módulo hay un método open
. Pero incluso tenemos una función incorporada llamada open
. Entonces, aquí deberíamos evitar usar from os import open
.
Incluso podemos usar form x import *
, esto importaría todos los métodos, clases de ese módulo al espacio de nombres global del programa. Esta es una mala práctica de programación. Por favor evítelo.
En general, debe evitarlo from x import y
simplemente por los problemas que puede causar en programas a gran escala. Por ejemplo, nunca se sabe si un compañero programador podría querer crear una nueva función que resulte ser el nombre de una de las funciones existentes. Tampoco sabe si Python cambiará la biblioteca desde la que está importando funciones. Si bien estos problemas no existirán con tanta frecuencia para proyectos en solitario, como se indicó anteriormente, es una mala práctica de programación y debe evitarse.