Las funciones son la forma más simple de organizar el código de una aplicación y su nombre hace referencia a las funciones matemáticas. Es decir, una función debería realizar una tarea muy concreta y bien definida y probablemente devolver un resultado. En las secciones anteriores ya se han utilizado funciones, como abs():
In [3]:
a = abs(-3.4)
a
Out[3]:
Veremos ahora como escribir nuestras propias funciones. La función tiene un formato muy simple:
Veamos un ejemplo:
In [1]:
def factorial(n):
if n == 0:
return 1
return n * factorial(n - 1)
factorial(100)
Out[1]:
Se trata de una función recursiva (que realiza su trabajo llamándose a sí misma). Lo más destacable es el hecho de que los parámetros tambpoco tienen un tipo explícito. Eso implica que nada impide que se pueda llamar con un valor no numérico, pero obviamente fallará.
In [10]:
factorial("text")
In [17]:
def f(a, b, c=7, d=14):
print("a={}, b={}, c={}, d={}".format(a, b, c, d))
f(1, 2)
In [18]:
f(1, 2, 3)
Es posible pasar parámetros en la llamada indicado su nombre. Se les llama parámetros nombrados (keyword arguments).
In [21]:
f(1, d=20, b=100)
Notar que no es posible utilizar parámetros posicionales (sin nombre) después de parámetros nombrados.
In [22]:
f(a=10, 20)
In [1]:
def variable_args_func(*args):
print(args)
variable_args_func(1, 'a', 3.0)
Aunque es posible definir algunos argumentos conocidos:
In [6]:
def func_with_name_and_other(name, *args):
print("name: '{}', other: {}".format(name, args))
func_with_name_and_other("foo")
func_with_name_and_other("bar", 4, 200, "bye")
También es posible capturar los parámetros con el parámetro especial "**kargs":
In [7]:
def func_with_args_and_kargs(*args, **kargs):
print("args: '{}', kargs: '{}'".format(args, kargs))
func_with_args_and_kargs(1, 2, title="great", finish=True)