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 ↑
  • Comentarios recientes

  • Miniposts

    • iOS 8 disponible para descargar

      Hoy se anunció de manera oficial iOS 8, la fecha de llegada será el próximo 17 de septiembre. En iPhonehacks han recopilado los enlaces de descarga directo para los diferentes dispositivos que soportan la nueva versión del sistema operativo. Así que para quienes no desean esperar, ya pueden acceder a la versión Golden Master ...

    • Festigame Colombia 2014

      El festival de videojuegos, cultura gamer y entretenimiento familiar más grande de América Latina ha llegado a nuestro país. Festigame que es un evento creado en Chile en 2012, se ha convertido en el evento anual donde las marcas más importantes de la industria presentan sus últimos productos en el ...

    • Peter Griffin también tiene cuenta en Instagram

      El protagonista de la serie de humor, Padre de Familia, Peter Griffin ha inaugurado su presencia en la red social de fotografía con divertidas fotografías de su vida, y a pesar de ser un personaje de ficción ya ha superado los 200.000 seguidores en tan sólo dos semanas. Son unas fotos bastante divertidas, las ...

    • Manual y documentación de Node.js para Android

      Node.js se ha venido haciendo bastante popular en los últimos años, cada vez son más los usos que como desarrolladores web le damos a esta tecnología. La siguiente aplicación es el manual y la documentación de Node.js, que contiene los siguientes temas: About these Docs Synopsis Assertion Testing Buffer C/C++ Addons Child Processes Cluster Console Crypto Debugger DNS Domain Events File System Globals HTTP HTTPS Modules Net OS Path Process Punycode Query Strings Readline REPL Stream String Decoder Timers TLS/SSL TTY UDP/Datagram URL Utilities VM ZLIB

    • Star Wars Traceroute

      ¿Qué pasa cuando un ingeniero está muy desocupado? pues pasan cosas como esta: Mac y Linux Van a la consola y escriben: traceroute 216.81.59.173 Windows Buscan el CMD y escriben: tracert 216.81.59.173 El resultado es interesante y sorprendente. Si quieren ver la salida de la ejecución del comando, pueden ver el gist Ver más: Beagle Network

  • Comunicados - Notas de Prensa