Advertisement
  1. Code
  2. Python

Python from Scratch - Funciones y módulos 

Scroll to top
Read Time: 21 min
This post is part of a series called Python from Scratch.
Python from Scratch: Variables, Data Types and Control Structure
Python from Scratch: Object Oriented Programming

Spanish (Español) translation by Claudia Márquez (you can also view the original English article)

Bienvenido de nuevo a la serie Python from Scratch.  En la lección anterior, aprendimos a usar variables y estructuras de control para almacenar y manipular datos.  ¡Asegúrese de revisarlo si necesita un repaso! 


Tutorial en vídeo


Transcripción

En el tutorial de hoy, veremos las funciones: qué son, cómo funcionan y cómo crear las suyas.  También vamos a revisar algunas de las funciones integradas y cómo usarlas de manera efectiva.  Finalmente, vamos a echar un vistazo a la creación e importación de módulos. 


Funciones - Escribir tu propias

Las funciones son un paso importante para cubrir, al introducir una complejidad adicional en su programación.  Si una variable es un contenedor con nombre para los datos, entonces una función es un contenedor con nombre para un bloque de código que puede ejecutarse a pedido.  Esto es útil si tiene un programa que ejecuta una determinada operación muchas veces.  En lugar de copiar y pegar el código para realizar esa operación en cada sección donde sea necesario, simplemente puede escribir una sola función para que lo haga por usted. 

Una función es un contenedor con nombre para un bloque de código. 

Hay dos tipos de funciones: las que usted mismo escribe e incluye en su código, y las que se incluyen en Python de forma nativa, que llevan a cabo procedimientos comunes, como convertir un número entero en una cadena, o encontrar la longitud de un cuerda. 

Ahora veremos cómo escribir una función simple y demostraremos cómo puede ser útil en el código del mundo real.  Luego, echaremos un vistazo a algunas de las funciones integradas más importantes. 

Un ejemplo simple 

Imaginemos que queremos hacer un guión para un carrito de compras que tome el costo de todos los artículos de su carrito y luego los agregue para devolver un costo total.  Para escribir una función que requiera dos costos, sumarlos y luego imprimir la salida, podríamos hacer algo como: 

Para definir la función, necesitamos usar la palabra clave 'def', y luego el nombre de la función. A continuación, escribimos dos paréntesis (volveremos a esos más adelante) y luego dos puntos.  Después de eso, todo el código que queremos encerrar dentro de la función debe estar sangrado, como con if, while y for loops.

Para hacer que se ejecute el código en la función, escribimos el nombre de la función, seguido de los dos paréntesis de nuevo.  Si ejecuta este código, verá que se imprime '35', que es el resultado correcto. 

Argumentos

Eso es genial, pero en este momento, nuestras funciones son un poco rígidas: todo en la función está codificado en ellas.  Por ejemplo, digamos que queremos usar la función sumCart en otra parte, en una parte diferente del programa, pero en lugar de sumar cost1 y cost2 juntos, queremos sumar otros dos costos que se mantuvieron en diferentes variables. Tendríamos que escribir una función completamente nueva, aunque esa nueva función sería exactamente la misma que la actual, con los nombres de las variables intercambiados, lo que no parece ser una solución eficiente. 

Para resolver este problema, usamos 'argumentos', y para eso son los paréntesis.  Un argumento es una forma de pasar datos a una función cuando no sabemos en qué variable o variables estarán esos datos.  Si eso es confuso, tomemos el ejemplo al que acabo de referirme.  Añadiremos dos costos más: cost3 y cost4. 

Ahora, vamos a agregar dos argumentos para los dos elementos que queremos sumar.  Los argumentos se definen dentro de los paréntesis, y cada argumento recibe un nombre, con una coma que los separa.  Un argumento actúa como una referencia temporal a los datos que pasó mientras la función se está ejecutando. 

Cuando llamamos a la función sumCart, las dos variables que hemos pasado (cost1 y cost2) se colocan en los argumentos item1 y item2. Esto siempre sucede en el mismo orden en que define los argumentos; en otras palabras, la primera variable que pasa se asigna al primer argumento, el segundo al segundo argumento, y así sucesivamente para tantos argumentos como su función tome.

Lo que realmente sucede cuando se ejecuta la función es que esos dos argumentos se convierten en variables locales y se asignan los valores de las variables que pasa a la función cuando la llama; en este caso, el valor de costo1 se coloca en la variable local item1, y el valor de cost2 se coloca en la variable local item2. Esto significa que puedes usarlos fácilmente dentro de la función. 

Otra forma de verlo es, cuando pasa una variable como un argumento, en todas partes donde aparece el nombre de ese argumento en la función, se reemplaza con la variable que usted ingresó.  Entonces, en este ejemplo, en todas partes en que se escribe el item1 dentro de la función, se reemplaza con cost1, y lo mismo con item2 y cost2.

Para demostrar que puede pasar cualquier número que desee, si ejecuta este código, ahora debería recibir la suma de cost3 y cost4:

Valores de argumento predeterminados

Tenga en cuenta que una función puede aceptar cualquier número de argumentos, pero recuerde: cuando llama a la función, tiene que pasar la misma cantidad de argumentos que definió, de lo contrario recibirá un error.  Hay una forma de evitar esto: puede definir un valor predeterminado para cualquier argumento, que se utiliza en los casos en que no proporciona un valor.

Considerando nuestro código actual, imaginemos que queremos que el segundo artículo cueste 5 si no le damos a la función un valor diferente. No es un escenario probable, pero demostrará el concepto.

Si ejecutamos este código, verá que, en la primera llamada, la salida es 20, que es de hecho (cost1 + 5). Sin embargo, esto no afecta el comportamiento cuando se suministran ambos argumentos.

Devolver valores

Hay una característica final de las funciones que vamos a revisar hoy: valores de retorno. Hemos aprendido a hacer una función que no le importa qué entradas toma, pero ¿y si quisiéramos almacenar la respuesta a "totalCost" en una variable en lugar de imprimirla? Quizás lo que queremos hacer es calcular el costo de los dos primeros elementos, y almacenarlo en una variable, luego hacer lo mismo con los otros dos elementos y almacenar esa respuesta en una segunda variable. Con el diseño actual de nuestra función, no pudimos hacerlo de forma legible y fácil de entender. 

De la misma manera que podemos pasar argumentos a una función para que no tengamos que codificar de dónde provienen los datos, podemos hacer lo mismo con la salida.  Le mostraré un ejemplo: en nuestra función anterior, reemplazaré la palabra 'print' por la palabra 'return':

Obviamente, la función ya no imprimirá la respuesta por nosotros; en su lugar, lo que vamos a hacer es transferir el valor de la variable totalCost a donde llamamos la función. De esa manera, podemos usar la respuesta en el contexto que necesitemos. Ahora, en nuestro programa anterior, eso no sería particularmente útil, porque no especificamos en ningún lugar para almacenarlo, así que también cambié la forma en que llamamos la función.

Necesitamos proporcionar a Python una variable en la que almacenar la respuesta, y luego simplemente vamos a establecer esa variable igual a nuestra declaración que llama a la función. Cuando la función devuelve un valor, ese valor ahora se almacenará en la variable que especificamos.


Funciones - Built-in

Hemos aprendido cómo hacer nuestras propias funciones y cómo usarlas, pero hay algunas operaciones que se llevan a cabo con la suficiente frecuencia como para que Python las haya incluido en cualquier programa. La forma en que los llama es exactamente igual que llamar a los suyos, pero no tiene que definirlos primero. Vamos a echar un breve vistazo a los más importantes ahora, pero asegúrese de echar un vistazo a la documentación de Python porque hay muchas funciones útiles que están disponibles para su uso, que no tenemos tiempo de cubrir correctamente. ahora.

Consulte la documentación de Python para obtener una lista de todas las funciones integradas.

Str()

Primero, echemos un vistazo a una de las funciones más útiles de Python: la función de conversión de cadenas.  Hay muchas veces en las secuencias de comandos cuando tiene una variable que contiene un número, o algún otro tipo de datos, pero necesita convertir ese valor en una cadena para hacer algo con él, normalmente para imprimirlo en la pantalla.

Digamos que tenemos un número en una variable y que queremos imprimirlo, con el mensaje "El número es" y luego el número. Si escribimos:

... luego nos encontraremos con un error, porque lo que le estás pidiendo a Python que haga es agregar un número y una cadena, lo que no tiene mucho sentido. Lo que tenemos que hacer es convertir el número 10 en la cadena 10. Si hacemos eso, Python entenderá que lo que estamos tratando de hacer no es encontrar una suma, sino que concatenar las dos cadenas en una.

Esto es donde entra la función str. Acepta un valor y devuelve una cadena para representarlo. En el caso de que le pases un número, simplemente devolverá el número pero en formato de cadena.

Ahora que hemos encerrado el número en una función de conversión de cadena, el código se ejecuta perfectamente. La función str no tiene que tomar un número, aunque – también puede tomar otros valores, como un valor boolean:

La función str() encuentra la coincidencia de cadena más cercana que puede encontrar para el valor de "true" y la devuelve, lo que significa que podemos mostrarla muy bien.

len()

Otra tarea común para las cadenas es poder encontrar la longitud de ellas y, nuevamente, Python tiene una función integrada para esto. Tomemos la cadena "Hello World" e intentemos encontrar su longitud. Para hacer esto, vamos a necesitar la función len() incorporada, que significa longitud. Todo lo que necesitamos hacer es pasarle la cadena que queremos usar, y devolverá la cantidad de caracteres que contiene:

Sin embargo, la función len() es capaz de más que esto. Lo que realmente hace es contar la cantidad de elementos en el objeto que le das: si le asignas una cadena, entonces esa es la cantidad de caracteres, pero también puedes darle una lista o una tupla, por ejemplo, y devolverá la cantidad de artículos en ese objeto en particular.

int()

Continuando, a menudo se te da un número como 10.6 o 3.896, que no es un número entero, pero necesitas un número entero de ellos.  La función incorporada para convertir a un número entero se llama int() y funciona de manera bastante predecible. La función devolverá la conversión entera de ese número. Tenga en cuenta que esta función NO redondea la entrada al entero más cercano, simplemente tira cualquier cosa después del punto decimal y le devuelve el número. Así que la entrada de 10.6 devolverá 10, NO 11. Del mismo modo, 3.25 devolvería 3.

La función int también puede convertir una cadena a un tipo de datos int. Por ejemplo, dado esto, la salida aún sería 10:

Sin embargo, tenga cuidado, porque cuando se convierte de una cadena a un entero, int() NO se ocupará de lugares decimales. Si usted la proporciona:

Luego generará un error, porque la entrada no era un entero, por lo que no sabía cómo manejarlo.

range()

Por último, vamos a ver rápidamente la función range(); aparece sorprendentemente a menudo cuando empiezas a realizar tareas más complejas en Python y, si bien puede que no parezca muy útil en este momento, vale la pena echarle un vistazo y conocer cómo funciona. El rango es una función que se usa para crear una lista de números siguiendo un patrón determinado. El ejemplo más simple es que quizás necesite una lista que contenga todos los números del 0 al 10. En lugar de escribirlos manualmente, puede usar la función de range para hacerlo en una línea.

El rango acepta un entero como parámetro y, en este caso, lo pasaremos 11. La función thens comienza en cero, y hace una lista contando hacia arriba hasta que llega a uno menos que el número que ingresaste. Así que aquí, si ponemos 11, almacenará los números del 0 al 10 en la lista de números:

¿Y si quisiéramos imprimir los números del cinco al diez en su lugar? Bueno, opcionalmente, podemos incluir otro argumento para el número inicial, así que esto imprimirá los números de cinco a diez:

Por último, ¿qué pasaría si quisiéramos imprimir solo los números impares menores de 10? Bueno, el rango acepta un tercer valor, que es la cantidad para subir cada paso. Entonces, si comenzamos en 1, establecemos el paso en dos y el límite superior en 11, deberíamos terminar con todos los números impares debajo de diez:

Como nota final, cualquiera de estos números también puede ser negativo, así que si quisiéramos contar el DOWN desde 10 a 1 en lugar de subir, podríamos configurar el paso como negativo 1, el valor de inicio a 10 y el límite a 0 , al igual que:

Ten en cuenta que el rango solo tratará con enteros, así que asegúrate de no darle ningún valor que no sea entero o arrojará un error.


Módulos - Creando tu propio

Bien, ahora hemos cubierto las funciones; Pasemos al segundo tema de la lección de hoy: los módulos. Si las funciones son grupos de código, los módulos son grupos de funciones. Hay más para ellos, pero esa es una buena manera de pensar en ellos por ahora.

Como comentamos anteriormente, no puede crear un programa complejo sin clasificar el código en funciones, y a medida que su programa continúa creciendo, incluso se vuelven difíciles de manejar. Tienes que ordenarlos en otro nivel jerárquico. Estos son módulos. Así que podemos resumirlos como una herramienta estructural y organizativa para nuestro código.

Los módulos son bastante fáciles de crear. Son simplemente archivos de Python, como tus scripts normales. Para crear un módulo, escriba una o más funciones en un archivo de texto, luego guárdelo con una extensión .py. Hagamos eso ahora con un ejemplo. Abra un nuevo archivo, su editor de texto o IDE, y haga una función. Continuaré con el ejemplo de un carrito de la compra anterior y haré una función para calcular el impuesto sobre los productos.

Cree un nuevo archivo en su IDE o editor de texto y vamos a crear una función para calcular el impuesto sobre un producto.

Si guardamos este archivo con una extensión .py en el mismo directorio que nuestro otro script, ¡podemos usarlo como un módulo! Es importante darle un nombre descriptivo para que sepa qué hace cuando regrese más tarde, así que llame a esta finance.py


Importación de módulos

Para usar módulos, podemos usar la import o la palabra clave from. import es la más simple y la más común, así que intentemos eso primero. Luego, especifica el nombre del módulo, que es simplemente el nombre del archivo, sin la extensión .py. Por ejemplo, con nuestro módulo de finance en la misma carpeta que nuestro script, podríamos escribir:

.. y tendríamos acceso a todas las funciones en el script.  Podemos llamarlos como lo hicimos antes. También puede usar la palabra clave from, que le permite seleccionar funciones específicas de la biblioteca, si sabe de antemano cuáles necesita. Para un módulo que tiene cientos de funciones, se recomienda esto: ahorra tiempo de carga en funciones que ni siquiera se están utilizando.

Puedes importar varios separando sus nombres con comas.

E incluso puede utilizar el comodín de asterisco para importar todo.

Después de importar el módulo, para usar las funciones que contiene, use el nombre del módulo, seguido de un punto y luego el nombre de la función. 

Esto debería dar como resultado 105 cuando se ejecuta el script. Un resultado simple, pero significa que tienes una función de trabajo!


Módulos Built-in

Hay un montón de módulos integrados, al igual que con las funciones incorporadas. ¡Aquí es donde realmente sobresale Python! Toma lo que se llama el enfoque de "baterías incluidas".

Debido a que Python tiene una amplia gama de módulos integrados, no hay forma de cubrirlos todos en una sola lección. Algunos son bastante oscuros, y no tiene sentido enseñar una carga de información para la que nunca podría tener un uso. En su lugar, vamos a cubrir algunos de los más útiles.

  • random
  • math
  • os
  • datetime
  • urllib2

random

Una buena para empezar es random, porque es fácil de entender y útil en la mayoría de los scripts que escribirás. Como era de esperar, este módulo le permite generar números aleatorios. Por ejemplo, cuando se usa Python para crear un sitio web, se pueden usar para hacer que su base de datos de contraseñas sea más segura o para activar una función de página aleatoria. Si quisiéramos un entero aleatorio, podemos usar la función randint, así:

Esto dará como resultado 1, 2, 3, 4 o 5. Randint acepta exactamente dos parámetros: el número más bajo y el más alto. Como puede ver, incluye el número más alto, pero va desde 1 sobre el número más bajo. Si desea un número de punto flotante aleatorio, puede utilizar la función random:

.. que genera un número aleatorio entre 0 y 1, a una carga de decimales. Si quieres un número más grande, puedes multiplicarlo. Por ejemplo, un número aleatorio entre 0 y 100:

El módulo random también tiene una función para elegir un elemento aleatorio de un conjunto, como una lista, llamada choice.

math

El módulo de math proporciona acceso a las constantes y funciones matemáticas.

Hay muchas más funciones en el módulo, pero estas son algunas de las más útiles. Puedes encontrar una lista completa aquí.

datetime

Si necesita trabajar con fechas y horas, entonces el módulo datetime es su amigo. Este es muy útil para el desarrollo web. Si está creando un sitio web con comentarios, o un blog, entonces probablemente estará mostrando su edad o el momento en que fueron creados.

Vamos a importar el módulo como de costumbre:

Para su comodidad, también puede importar los componentes de fecha y hora por separado, para que no tenga que escribirlos más tarde.

Echemos un vistazo a algunas de las funciones que proporciona:

Hay algunas funciones útiles para convertir fechas en cadenas utilizables. strftime le permite formatear una cadena basada en caracteres especiales precedidos por un símbolo de porcentaje. %d representa el día, por ejemplo.

os

El siguiente módulo que estamos viendo es os, que proporciona funciones que le permiten interactuar con el sistema operativo subyacente en el que se ejecuta Python, ya sea Windows, Mac o Linux. Nos centraremos en el submódulo de path. Le permite manipular y encontrar las propiedades de los archivos y carpetas en el sistema, por lo que es el más útil para el desarrollo web. A menudo necesitarás administrar archivos, por ejemplo, subidas de usuarios.

Estas marcas de tiempo se pueden convertir en cadenas utilizables utilizando el módulo datetime: puede ver cómo puede combinar módulos.

La última función en el módulo de sistema operativo que vamos a ver es join. Combina dos caminos en uno. Podría estar pensando: "¿Por qué no puedo simplemente concatenar las cadenas?", Pero no es tan simple como eso. En Windows, el delimitador de ruta es una barra invertida, en Mac y Linux es una barra diagonal. Este módulo alivia problemas como ese y asegura que sus scripts de Pythons funcionen en cualquier sistema. 

urllib2

Para finalizar nuestro recorrido por la biblioteca estándar de Python, vamos a echar un breve vistazo a urllib2. Este módulo le permite interactuar con la web, por lo que obviamente es muy relevante para nosotros. La función más útil que proporciona es urlopen, que descarga una página.

Lo usas de la siguiente manera:

Obviamente, puedes intercambiar la cadena de URL por cualquier sitio. Esto descargará el contenido HTML de la página. Sin embargo, esto no devolverá una cadena, por lo que necesitamos leer los datos para obtener eso:

Esto devolverá los primeros 100 caracteres de la fuente HTML de Nettuts+. Una vez que tenga estos datos, puede ordenarlos y extraer los bits necesarios que necesite.


Consejos finales

Si su módulo está en un directorio diferente al de su script, es un poco más difícil importarlos.  Tienes que crear un archivo que le diga a Python que la carpeta es un paquete.  Por ejemplo, si tiene una carpeta, llamada subdirectorio, en la misma carpeta que su script, y luego su módulo dentro de ese subdirectorio, tendría que crear un archivo llamado __init__.py en la misma carpeta que el módulo. Este archivo puede estar vacío.  Entonces, desde tu script, lo importas: 

¡Revísalo si necesitas un repaso!


Tutorial en vídeo


Transcripción

En el tutorial de hoy, veremos las funciones: qué son, cómo funcionan y cómo crear las suyas. También vamos a revisar algunas de las funciones integradas y cómo usarlas de manera efectiva. Finalmente, vamos a echar un vistazo a la creación e importación de módulos.


Funciones - Escribir tu propio

Las funciones son un paso importante para cubrir, al introducir una complejidad adicional en su programación. Si una variable es un contenedor con nombre para los datos, entonces una función es un contenedor con nombre para un bloque de código que puede ejecutarse a pedido. Esto es útil si tiene un programa que ejecuta una determinada operación muchas veces. En lugar de copiar y pegar el código para realizar esa operación en cada sección donde sea necesario, simplemente puede escribir una sola función para que lo haga por usted.

Una función es un contenedor con nombre para un bloque de código.

Hay dos tipos de funciones: las que usted mismo escribe e incluye en su código, y las que se incluyen en Python de forma nativa, que llevan a cabo procedimientos comunes, como convertir un número entero en una cadena, o encontrar la longitud de un cuerda.

Ahora veremos cómo escribir una función simple y demostraremos cómo puede ser útil en el código del mundo real. Luego, echaremos un vistazo a algunas de las funciones integradas más importantes. 

Un ejemplo simple

Imaginemos que queremos hacer un guión para un carrito de compras que tome el costo de todos los artículos de su carrito y luego los agregue para devolver un costo total.  Para escribir una función que requiera dos costos, sumarlos y luego imprimir la salida, podríamos hacer algo como:

Para definir la función, necesitamos usar la palabra clave 'def', y luego el nombre de la función. A continuación, escribimos dos paréntesis (volveremos a esos más adelante) y luego dos puntos. Después de eso, este es el código que tenemos.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.