Funciones

Las funciones usan la palabra clave “def” en su declaración.


def mifuncion():
    pass

Con la palabra clave “pass” podemos simplemente escapar de la rutina sin hacer nada.

No existe diferencia entre procedimientos y funciones. Una función no está obligada a devolver un parámetro, aunque puede hacerlo.

Argumentos

Una funcion puede aceptar argumentos posicionalmente


def mifuncion(parametro1):
    print parametro1
mifuncion("Hola")
> Hola

Tambien lo puede hacer usando el nombre dle parametro que se quiere introducir;


def mifuncion(parametro1, parametro2, parametro3):
    return "Estos son mis parametros {0},{1},{2}".format(parametro1, parametro2, parametro3)
mifuncion(parametro1="hola", parametro3="que tal", parametro2="estupendo")
> 'Estos son mis parametros hola,estupendo,que tal'

como se puede observar, la posicion no importa siempre que se indique el valor del parámetro introducido.

Ahora bien, python es capaz de llevar las cosas aun mas lejos. Es posible pasarle un array de argumentos, y el es capaz de interpretarlos como la lista de parametros desordenados, pero identificados por su nombre que hemos hecho antes.

*args

Pasandole un argumento con asterisco a la función, se introducen todos los parametros posicionales en una lista que puede ser posteriormente procesada


In [1]: def mifuncion(*args):
   ...:     for arg in args:
   ...:         print arg
   ...: 
In [2]: mifuncion(1,'a','b',{"midict":1})
> 1
> a
> b
> {'midict': 1}

**kwargs

Con el doble asterisco recogemos todos los parámetros nominales (los parametros con nombre)


In [12]: def mifuncion(**argumentos):
   ....:     for argumento in argumentos:
   ....:         print argumento +" "+argumentos[argumento]
In [14]: mifuncion(a='2',b='3')
a 2
b 3

Tambien es posible combinar ambos tipos:


In [20]: def mifuncion (*args, **kwargs):
   ....:     for arg in args:
   ....:         print "argumento posicional {0}".format(arg)
   ....:     for kwarg in kwargs:
   ....:         print "argumento por palabra clave {0} = {1}".format(kwarg, kwargs[kwarg])
   ....: 
In [21]: mifuncion('argumento1 posicional','argumento2 posicional', porkeyword1='uno', porkeyword2='dos')
argumento posicional argumento1 posicional
argumento posicional argumento2 posicional
argumento por palabra clave porkeyword2 = dos
argumento por palabra clave porkeyword1 = uno

Decoradores

Es posible usar el patron Decorator en funciones python. La misión del decorador es agregar funcionalidad extra a nuestra funcion. Los decoradores utilizan “@” como token y se situan sobre la definición de la funcion.


@decorador
def mitarea():
   implementacion 

Se pueden añadir varios decoradores a una misma funcion (siempre que sean compatibles), Los decoradores tambien pueden recibir argumentos


@task(dia=1,hora=*)
@csrf_exempt
def mifuncion(*args):
    implementacion

Funciones anomimas, Lamdas

Las funciones anonimas o lambdas son una manera rápida de escribir funciones sin tener que declararlas. De este modo ahorramos lineas de código. Son una forma de expresion muy pitónica, junto con las listas por compresión.

Supongamos que queremos ordenar el precio de una lista de casas

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *