Geek the Planet


Programacion no image

Published on abril 3rd, 2011 | by Angelfire

0

Bitacora Python 1: Declaración de funciones y paso de argumentos

He empezado a leer el libro que recomendé en mi publicación anterior, Dive into Python, es realmente bueno el libro, estoy impresionado con lo mucho que he aprendido, así que he querido sacar un par de minutos para hacer como la bitácora 1 de mi aventura.

Declaración de funciones en Python y el paso de argumentos

Esto tal vez sea demasiado básico, pero es sorprendente la manera en como trabaja Python…

Lo primero a tener en cuenta es que en Python no existen las subrutinas, absolutamente todo son funciones incluso si no retornan nada. Y todas empiezan con def

Python es un lenguaje débilmente tipado lo que quiere decir que los tipos se ignoran, no tenemos que indicarle ni a las variables ni a las funciones de que tipo son.

Este es el ejemplo número 1 de Dive into Python:

def approximate_size(size, a_kilobyte_is_1024_bytes=True):

La función recibe 2 argumentos, el primero es un número en bytes, el segundo es True si queremos mostrar el primer valor en múltiplos de 1000, es decir: KiB, MiB, etc, es False si queremos que nos muestre el primer valor en mútiplos de 1024, es decir: KB, MB, etc.

Una de las cosas que hasta el momento me ha gustado, es la manera en como pasamos argumentos a la función, si vemos el segundo argumentoa_kilobyte_is_1024_bytes aunque no esté tipado vemos que es un booleano, Python permite que las funciones tengan valores por defecto, en este caso True, lo que quiere decir que todos los números nos los mostrará por defecto en múltiplos de 1000.

Haciendo un par de pruebas y gracias a mi amigo/sensei @wvega nos dimos cuenta de una cosa bastante interesante, primero mostraré las pruebas que hice pasando argumentos a la función approximate_size():

>>> approximate_size(4000, a_kilobyte_is_1024_bytes=False)
'4.000000 KB'
>>> approximate_size(size=4000, a_kilobyte_is_1024_bytes=False)
'4.000000 KB'
>>> approximate_size(a_kilobyte_is_1024_bytes=False, size=4000)
'4.000000 KB'

En los 3 ejemplos anteriores podemos ver que Python es bastante permisivo con la manera en como le pasamos argumentos a la funcion, realmente no le importa el orden como se los pasamos, eso si, teniendo en cuenta una regla sencilla (la explicaré más adelante).

>>> approximate_size(a_kilobyte_is_1024_bytes=False, 4000)
  File "", line 1
SyntaxError: non-keyword arg after keyword arg
>>>approximate_size(size=4000, False)
  File "", line 1
SyntaxError: non-keyword arg after keyword arg

Llegados a este punto podemos explicar la regla, a Python no le importa el orden de los argumentos, pero si empezamos llamando el primer argumento por el nombre, estamos Obligados a que el segundo también sea llamado por su nombre. Interesante, no?

Haciendo algunas pruebas más, me encontré con algo interesante…

>>>approximate_size(False,4000)
'0.000000 KiB'

Equivalente a tener:

>>>approximate_size(0,4000)
'0.000000 KiB'
>>>approximate_size(True,4000)
'0.000977 KiB'

Equivalente a tener:

>>>approximate_size(1,4000)
'0.000977 KiB'

Ahora, ¿por qué esos resultados?, digamos que para un novato como yo al principio no son tan obvios, pero al final son conceptos básicos, típicamente en este mundo de la computación False es 0 y True es 1, ya, esa es la respuesta, Python convierte los valores a 0 y a 1 respectivamente y sin importar el segundo valor siempre tomará el valor por defecto que teníamos para ese valor en la función, es decir True, osea múltiplos de 1024: KiB, MiB…

Muy interesante no?, cada día amo más a Python :D

Tags: , ,


About the Author

Systems Engineering, Computer Systems Specialist, Social Engineering Specialist. Social Media Analyzer. Usability and SEO enthusiasm (Este es mi perfil de Twitter...)



Comments are closed.

Back to Top ↑