Desarrollar funciones en Python pueden ser necesario para hallar solucion a problemas que otras funciones existentes no nos resuelven.
La librería del lenguaje no deja de crecer, pero es común que si actuamos como investigadores, en mas de una ocasion, no encontremos lo que necesitamos para obtener la respuesta que buscamos.
En Python como en muchos otros lenguajes existen funciones y métodos.
Veamos a una función como trozo de código que controla o ejecuta un conjunto de instrucciones, y a la que podemos necesitar utilizar varias veces, esperando siempre el mismo comportamiento.
Los tipos de funciones en Python son tres:
Las que son predefinidas como print()
o help()
.
Las que son definidas por el usuario, ya que este las crea
Las funciones anónimas, o funciones lambda, llamadas asi porque no se declaran bajo el standard def
, que es el que usa python en el resto de los casos.
Docstring
Antes de ir más allá, algo básico a la hora de escribir código en Python como en todo lenguaje de programación, son los comentarios, o la documentación que explique lo que estamos creando.
Añadir docstrings
a la función, permite conocer su comportamiento esperado, ya que mediante su descripción documentamos todo aquello que consideramos importante, para entender que hace.
Los docstring
se colocan justo después de la primera línea de la función, y se inicializan con tres comillas dobles, y se finaliza de igual modo.
def nada():
"""
esta función no hara nada
retornara un campo de tipo none
"""
return
Métodos
Los métodos son pequeñas funciones, que forman parte de una clase, por tanto se accede a ellos instanciando esta o con un objeto, a diferencia de una función típica que puede ser llamada sin esa restricción.
Puede parecer confuso, pero la mejor forma de verlo es pensando que: todos los métodos son funciones pero no todas las funciones son métodos.
Por ejemplo una función puede ser:
def función_x(a,b,c):
return a*b+c
Habiendo definido la función y lo que esperamos de ella, para llamarla solo debemos asignar valores a sus parámetros
función_x(2,3,5)
Comparemos como seria al crear una clase:
class Resultado(object):
def solucion(self, a,b,c):
self.contents = a*b+c
return self.contents
Si ahora deseamos llamar al método solución()
, al pertenecer a la clase Resultado
, necesitamos primero crear un objeto o instanciar la clase.
solucionInstance = resultado()
solucionInstance.solucion(1,2,4)
Un elemento que puede llamar a confusión cuando empiezas en
Python es la diferencia entre parámetros y argumentos.
Entenderlo es más sencillo de lo que parece:
Imagina que creas una función que suma dos variables, la
variable A y la B
def letras(A, B)
return A+B
A y B son parámetros, sin embargo cuando debes llamar la función
o el método para ejecutarlo necesitas
dar valor a los parámetros cuando los
llamas
Si
A = 1, B=5
def letras(1, 5)
La función hará lo
que está establecido en su comportamiento sumar 1+5
Cuando creamos la clase Resultado
al método solución se le pasaron tres parámetros, sin embargo al crear el objeto se pasaron cuatro argumentos, pues se añadió self
.
self
, es siempre el primer argumento de cualquier clase y hace referencia a ella misma.
Cuando una función es creada por un usuario, se declara siempre igual:
- La palabra
def
y luego el nombre de la función, después se añaden los parámetros de la función entre paréntesis y después dos puntos, para terminar la línea. - La acción que la funcion debe ejecutar..
- Y la llamada a return para que nos devuelva algo. No colocar return provocará que la función devuelva un objeto none, el cual no admite que se ejecuten funciones sobre el.
def función(a, b):
c=a+b
return c
Existen diferentes tipos de argumentos
Los que son por defecto, los requeridos, los argumentos
keyword y los variables.
Argumentos por defecto
Son que les asigna un valor mediante el operador =
def menos(a,b,d=3):
return a-b-d
Esta función puede ser llamada con todos sus parámetros, o solo con alguno de ellos.
#llamandola con 1 parametro
menos(b=2)
#llamandola con todos los parametros
menos( a=10,b=12,d=4)
Argumentos requeridos
Son aquellos que tiene que ser pasados a la función en el
momento adecuado y en un orden dado para garantizar su ejecución
En la función menos() a, b y d
son argumentos requeridos, los cuales deben pasarse en un momento dado (al inicio) y en un orden ( ya que a-b-d), cambiar ese orden alteraría el resultado.
Argumentos keyword
Este tipo de argumentos son llamados utilizando el parametro
al que corresponde para identificarlo
def sol(a,b):
return a+b
#llamando la función con el uso de keywords
def sol(a=2, b=3)
Cuando usamos las
keywords, podemos cambiar el orden de los argumentos, sin que ello afecte el
resultado
def sol(b=3,a=2)
Argumentos de número variable
Se utiliza cuando no se sabe el numero de argumentos esperado, y para ello se utiliza la sintaxis *args
def varios(*args):
return sum(args)
#ejecutando la función
varios(3,6,7)
El asterisco *
, se coloca antes del nombre de la variable que soporta los argumentos multiples:
def diferentes(*varnueva):
x=2
for i in varnueva:
x += i*2
return x
Variables
Las variables en Python pueden ser locales o globales, las primeras son las que se definen dentro de las funciones, por tanto solo se puede acceder a ellas desde dentro de la función, mientras que las variables globales puede obtenerla cualquier función.
Return
Return es el encargado de
devolver el resultado, ya sea uno o múltiples valores, y su uso nos
permite , ampliar las posibilidades de
nuestra función o método.
Cuando necesitamos que el return nos devuelva multiples valores, utilizaremos tuplas
Desarrollar funciones en Python
Funciones anónimas
Son las funciones que en vez de declararse con def
, son declaradas con la palabra lambda
.
double = lambda x: x*3
double(5)
En este caso x
es el argumento, y x*3
la instrucción que la función debe cumplir
Una función con dos argumentos podría ser
sum = lambda xmy:x+y
sum(4,2)
Las funciones anónimas pueden usarse por ejemplo, cuando se requieren funciones con un corto periodo de tiempo de vida, por ejemplo cuando se trabaja con maps(), filter() o reduce().
Main
La función main()
, se usa comunenente en Python para agrupar los principales componentes de un sistema.
En un ejemplo sencillo podría ser algo asi:
def main():
varios()
solucion()
main()
Existe un detalle a considerar, para llamar main()
como clase, debe hacerse de esta forma:
__name__ ==’__main__’:
De
lo contrario Python asumirá que estamos llamando a un modulo
main()
también puede crearse utilizando __init__
para instanciar una clase o un objeto. El nuevo objeto instanciado es asignado al parámetro self
La estructura es esta:
class nueva:
""" Requires:
atrib_a
atrib_b
"""
def __init__ (self, atrib_a, atrib_b):
self.atrib_a =atrib_a
self.atrib_b = atrib_b
def funcion1(self):
funcion1 = …acción….
return funcion1
#llamando a main
if __name__ == ”__main__”:
solucion = solucion(argumento1, argumento2)
funcion1 = solucion.funcion1()
print(funcion1)
Y listo, esto es todo.
Espero modestamente que este artículo, sirva de ayuda a alguien.
Gracias.
….un sueño es casi todo y más que nada, más que todo al soñarlo, casi nada después……