Python logo - Curso de Python desde cero

Parámetros en las funciones

Vemos como utilizar los parámetros o argumentos en las funciones en Python

Bienvenidos a otra entrega de este curso de programación en python en el que nos encontramos viendo el tema de las funciones en Python. Vamos a continuar con ello y vamos a ver el paso de parámetros o argumentos a funciones. Así que vamos a ello.

En el post anterior guardamos nuestro primer archivo con extensión .py escrito en python. Seguramente te lo va a abrir por defecto con el IDLE de python porque es probable que sea el programa que tienes configurado en tu ordenador para que abra este tipo de archivos. También lo puedes abrir si estás bajo windows: botón derecho > abrir con... y eliges otra aplicación, como por ejemplo Sublime.

Vamos a seguir trabajando con el tema de funciones viendo en este post el concepto de parámetro o argumento de una función.

Qué es el parámetro o argumento de una función y para qué sirve

Voy a declarar una función que se va a encargar de sumar dos valores. A esta función la voy a llamar por ejemplo suma, y de momento lo voy a hacer como conocemos nosotros es decir sin parámetro ninguno.

Declaramos la función: def, nombre la función, paréntesis, dos puntos y al darle al enter, fíjate como automáticamente se agrega la identación. Voy a declarar una variable a la cual llamo num1 que es igual a 5. A continuación declaro otra, a la cual voy a llamar num2 que es igual a 7. Y ahora dentro de esta función vamos a incluir la instrucción print() que se va a encargar de imprimir el número 1 más el número 2.

>>> def suma():
        num1 = 5
        num2 = 7
        print(num1 + num2)

A continuación pulsamos enter, situamos el cursor al mismo nivel que la solución para salir de la función. Ahora ya sabéis si queremos ejecutar esta función lo único que hay que hacer es llamarla, es decir, poner su nombre. La función realiza su trabajo: declaración de dos variables e imprime en consola la suma de esas dos variables

>>> suma()
12

Hasta aquí, creo que no hay nada nuevo. El tema está en que si recordáis dije que la principal utilidad de una función es reutilizar el código, entonces nosotros podríamos reutilizar el código de esa función llamando a la misma tantas veces como queramos.

Efectivamente la función se puede ejecutar reutilizar tantas veces como queramos, pero cuando ocurren operaciones de este tipo, lo útil no es que la función sume siempre los mismos valores, sino que en cada llamada utilice unos valores diferentes. Ahí adquiere un potencial mucho más grande el tema de las funciones.

¿Cómo podemos hacer que una misma función utilice diferentes valores en cada llamada?

Para conseguir que en cada llamada utilice valores diferentes, utilizamos lo que se llaman parámetros o argumentos, que consisten en los siguiente: en la declaración de la variable, en la definición, dentro de los paréntesis o zona de parámetros, ahí declaramos dos parámetros o argumentos exactamente igual que se declara una variable normal.

>>> def suma(num1, num2):
        print(num1 + num2)

Acabamos de crear o definir una función, la cual va a recibir dos parámetros o dos argumentos. Una función en python puede recibir ningún parámetro, como las que hemos hecho hasta ahora, un parámetro o varios como en este caso. Siempre que reciba más de un parámetro, estos han de ir separados por comas.

Si declaramos los argumentos dentro de la zona de parámetros, ya no tiene sentido que los declaremos dentro de la función con lo que lo podemos eliminar y dejar únicamente la instrucción de print().

Es muy importante que si tú tienes una función que está preparada para recibir dos parámetros, en la llamada obligatoriamente le tienes que pasar esos dos parámetros o argumentos. En la primera llamada estamos obligados a pasarle dos valores numéricos para que sume. Por ejemplo 5 y 7, separados por comas.

>>> suma(5, 7)
12

En la llamada estamos incluyendo dos parámetros, en este caso el primer y segundo valor viajan para almacenarse en su zona correspondiente. Esto internamente es como si le dijéramos en la llamada que en num1 es igual a 5 y que num2 es igual a 7. Una vez que el intérprete tiene esta información, lo único que hace es ejecutar el código que hay dentro de la función. Si dentro de la función le estamos diciendo que imprima el número uno más el número dos, pues evidentemente tendrá que imprimir con esta primera llamada un 12.

Si hacemos ahora otra llamada, aquí es donde viene lo bueno, podemos pasarle dos argumentos totalmente diferentes, como por ejemplo 2 y 3.

>>> suma(2, 3)
5

Es importante saber que los valores o parámetros se almacenan en el mismo orden que lo vayas escribiendo, esto se puede modificar en python, pero por defecto el comportamiento que tiene es ese.

Si nosotros le decimos 5 y después 7, pues como 5 es el primer valor se almacena en el primer parámetro o argumento, mientras que el segundo valor se almacenará en el siguiente parámetro. En el caso de que esta función tuviese 20 parámetros y en la llamada le pasáramos 20 valores, pues cada uno sería almacenando en su lugar correspondiente.

Tipos de datos en los argumentos

Los argumentos o parámetros de una función pueden ser de diferente tipo. En este caso concreto nosotros pues le hemos pasado dos parámetros de tipo numérico, concretamente números enteros, pero esto se puede combinar.

Puedes tener una función en la cual haya cinco parámetros, dos de ellos sean números enteros, uno de ellos sea texto, otro booleano y otro un número decimal.

>>> mi_funcion(2, True, "una cadena de texto", 4.25)

Devolver un valor con return

También hablamos ya de que una función podía devolver opcionalmente un valor y dijimos también que las funciones que devolvían valores eran aquellas que llevaban en su interior la instrucción return. Hasta ahora nosotros no hemos creado ninguna función con la instrucción return.

¿Cómo funciona una función que devuelve un valor?

Encuentro similitudes entre el uso y funcionamiento de una función en un lenguaje de programación que lleva instrucción return con las máquinas de vending, esas máquinas de bebida y chocolatinas. ¿Por qué? pues porque una función con return devuelve un valor de la misma forma que una máquina de estas nos devuelve un artículo. Y además si tenemos en cuenta que estas máquinas llevan un teclado para escribir el código del producto, todavía se asemeja más a una función que recibe parámetros y que lleva return.

Declaramos una función, como por ejemplo la función suma, con una instrucción return en su interior para que nos devuelva un resultado:

>>> def suma(valor1, valor2):
        return valor1 + valor2

Podemos optimizar un poco más el código, podemos declarar una variable que se llame resultado, que sea igual a la suma de los dos valores y decirle a nuestra función que nos devuelva con la instrucción return la variable resultado.

>>> def suma(valor1, valor2):
        resultado = valor1 + valor2
        return resultado

Como decía encuentro bastantes semejanzas con el funcionamiento de una máquina vending, ya que tienen un teclado para introducir un código; dependiendo del código que tú introduzcas la máquina te devuelve un producto u otro.

Pues las funciones con parámetros y con instrucción return funcionan exactamente igual. Dependiendo de los parámetros que tú introduzcas te va a devolver un resultado u otro, igual que una máquina: dependiendo del código te va a devolver un producto u otro.

Trasladando esto que acabamos de ver a código:

>>> suma(8, 2)
>>> suma(17, 6)
>>> suma(188, 252)      

Si nosotros ejecutamos este programa ahora mismo no va a salir absolutamente nada y podéis pensar que no funciona, pero no es así. El programa está funcionando y realmente se están almacenando valores en la memoria, y la función está devolviendo esos valores, lo único que ocurre es que no le estamos diciendo a nuestro programa que lo visualice de ninguna forma.

Nuestro programa tiene que imprimir esto, que nos devuelva la función en algún sitio y aquí no hay ninguna instrucción print() necesaria para poder visualizarlo.

Entonces esto habría que modificar de la siguiente forma:

>>> print(suma(8, 2))
>>> print(suma(17, 6))
>>> print(suma(188, 252))   

Si ejecutamos ahora mismo, nos mostrará los diferentes resultados:

10
23
440  

Yo sé que los que veis esto por primera vez estáis pensando que esto es liarlo más y que no le veis utilidad ninguna. En parte tenéis razón en que es liar lo más, pero utilidad sí que tiene y mucha.

¿Por qué incluir un return en vez de un print()?¿Por qué hacer que una función nos devuelva un resultado

Entre otras muchas cosas, fundamentalmente porque puedes asignar o almacenar en una variable lo que nos devuelve esta función y eso, aunque de momento no lo veis por qué estamos comenzando a programar, adquiere una potencialidad brutal.

Es decir, nosotros podemos crear una variable a la cual podemos llamar por ejemplo almacena_resultado y decir que esto es igual a lo que devuelve la función pasándole los valores por ejemplo 5 y 8.

>>> almacena_resultado = suma(5, 5)

Ahora mismo lo que tenemos dentro de esta variable es el resultado que nos ha devuelto la función suma después de pasarle esos dos parámetros. Aunque de momento no le veis utilidad, sí que la tiene y bastante.

Ahora mismo si ejecutamos ocurre lo mismo que antes, no sale absolutamente nada porque no le hemos dicho que imprima lo que nos devuelve este programa. Habría que decirle print() con la variable:

>>> print(almacena_resultado)

Esto que acabamos de hacer en programas complejos, nos permitiría ir utilizando lo que la función suma haya devuelto a lo largo de las miles de líneas de código que puede tener un programa complejo. Es decir, lo tenemos todo almacenado en una variable y eso pues nos permite utilizarlo más adelante en el código de una aplicación compleja, las veces que queramos y eso tiene mucha potencialidad.

Si hay alguien con conocimientos más o menos avanzados de programación en otros lenguajes leyendo este artículo, puede ser que se le ocurra a la pregunta de si python pasa los valores o parámetros por referencia o por valor. No os preocupéis de momento con esto porque de momento no carece de importancia, pero bueno simplemente deciros que python pasa siempre los valores por referencia,

El concepto de referencia es un concepto en el que tenemos que ahondar en los próximos artículos porque para python todos son referencias al contrario de lo que ocurre con otros lenguajes de programación.

Bueno, pues una vez que hemos visto el paso de parámetros a funciones, vamos a dejar este post en el punto en el que nos encontramos. Lo de siempre, os invito a que permanezcáis atentos a la próxima entrega. Hasta entonces.

Ir arriba

Si continuas utilizando este sitio aceptas el uso de cookies. más información

Los ajustes de cookies de esta web están configurados para «permitir cookies» y así ofrecerte la mejor experiencia de navegación posible. Si sigues utilizando esta web sin cambiar tus ajustes de cookies o haces clic en «Aceptar» estarás dando tu consentimiento a esto.

Cerrar