Definiendo funciones
En Python, la definición de funciones se realiza mediante la instrucción def
más un nombre de función descriptivo -para el cuál, aplican las mismas reglas que para el nombre de las variables- seguido de paréntesis de apertura y cierre. Como toda estructura de control en Python, la definición de la función finaliza con dos puntos (:
) y el algoritmo que la compone, irá identado con 4 espacios:
def mi_funcion():
# aquí el algoritmo
Una función, no es ejecutada hasta tanto no sea invocada. Para invocar una función, simplemente se la llama por su nombre:
def mi_funcion():
print "Hola Mundo"
funcion()
Cuando una función, haga un retorno de datos, éstos, pueden ser asignados a una variable:
def funcion():
return "Hola Mundo"
frase = funcion()
print frase
4.1.1. Sobre los parámetros
Un parámetro es un valor que la función espera recibir cuando sea llamada (invocada), a fin de ejecutar acciones en base al mismo. Una función puede esperar uno o más parámetros (que irán separados por una coma) o ninguno.
def mi_funcion(nombre, apellido):
# algoritmo
Los parámetros, se indican entre los paréntesis, a modo de variables, a fin de poder utilizarlos como tales, dentro de la misma función.
Los parámetros que una función espera, serán utilizados por ésta, dentro de su algoritmo, a modo de variables de ámbito local. Es decir, que los parámetros serán variables locales, a las cuáles solo la función podrá acceder:
def mi_funcion(nombre, apellido):
nombre_completo = nombre, apellido
print nombre_completo
Si quisiéramos acceder a esas variables locales, fuera de la función, obtendríamos un error:
def mi_funcion(nombre, apellido):
nombre_completo = nombre, apellido
print nombre_completo
# Retornará el error: NameError: name 'nombre' is not defined
print nombre
Variables libres globales o no locales
Si a una variable no se le asigna valor en una función, Python la considera libre y busca su valor en los niveles superiores de esa función, empezando por el inmediatamente superior y continuando hasta el programa principal. Si a la variable se le asigna valor en algún nivel intermedio la variable se considera no local y si se le asigna en el programa principal la variable se considera global, como muestran los siguientes ejemplos:
- En el ejemplo siguiente, la variable libre "a" de la función subrutina() se considera global porque obtiene su valor del programa principal:
Ejemplo de variable libre globa
def subrutina():
print(a)
return
a = 5
subrutina()
print(a)
| 5
5
|
.
Ejemplo de variable libre global - Paso 1
def subrutina():
print(a)
return
a = 5
subrutina()
print(a)
| |
La primera instrucción del programa asigna el valor 5 a la variable "a".
Ejemplo de variable libre global - Paso 2
def subrutina():
print(a)
return
a = 5
subrutina()
print(a)
| |
A continuación se llama a la función subrutina().
Ejemplo de variable libre global - Paso 3
def subrutina():
print(a)
return
a = 5
subrutina()
print(a)
| 5 |
En la función subrutina(), la variable "a" es libre puesto que no se le asigna valor. Su valor se busca en los niveles superiores, por orden. En este caso, el nivel inmediatamente superior es el programa principal. Como en él hay una variable que también se llama "a", Python coge de ella el valor (en este caso, 5) y lo imprime. Para la función subrutina(), la variable "a" es una variable global, porque su valor proviene del programa principal.
Ejemplo de variable libre global - Paso 4
def subrutina():
print(a)
return
a = 5
subrutina()
print(a)
| 5
|
La instrucción return indica el final de la función y continúa la ejecución del programa tras la llamada a la función.
Ejemplo de variable libre global - Paso 5
def subrutina():
print(a)
return
a = 5
subrutina()
print(a)
| 5
5
|
La última instrucción del programa escribe de nuevo el valor de "a", que sigue siendo 5 pues la función no ha modificado el valor de la variable.
- En el ejemplo siguiente, la variable libre "a" de la función sub_subrutina()
- se considera no local porque obtiene su valor de una función intermedia:
Ejemplo de variable libre no local
def subrutina():
def sub_subrutina():
print(a)
return
a = 3
sub_subrutina()
print(a)
return
a = 4
subrutina()
print(a)
| 3
3
4
|
Ejemplo de variable libre no local - Paso 1
def subrutina():
def sub_subrutina():
print(a)
return
a = 3
sub_subrutina()
print(a)
return
a = 4
subrutina()
print(a)
| |
La primera instrucción del programa asigna el valor 4 a la variable "a".
Ejemplo de variable libre no local - Paso 2
def subrutina():
def sub_subrutina():
print(a)
return
a = 3
sub_subrutina()
print(a)
return
a = 4
subrutina()
print(a)
| |
A continuación se llama a la función subrutina().
Ejemplo de variable libre no local - Paso 3
def subrutina():
def sub_subrutina():
print(a)
return
a = 3
sub_subrutina()
print(a)
return
a = 4
subrutina()
print(a)
| |
La primera instrucción de la función subrutina() asigna el valor 3 a la variable "a", así que esta variable "a" será una variable local.
Ejemplo de variable libre no local - Paso 4
def subrutina():
def sub_subrutina():
print(a)
return
a = 3
sub_subrutina()
print(a)
return
a = 4
subrutina()
print(a)
| |
A continuación se llama a la función sub_subrutina().
Ejemplo de variable libre no local - Paso 5
def subrutina():
def sub_subrutina():
print(a)
return
a = 3
sub_subrutina()
print(a)
return
a = 4
subrutina()
print(a)
| 3
|
En la función sub_subrutina(), la variable "a" es libre puesto que no se le asigna valor. Su valor se busca en los niveles superiores, por orden. En este caso, el nivel inmediatamente superior es la función subrutina(). Como en ella hay una variable local que también se llama "a", Python coge de ella el valor (en este caso, 3) y lo imprime. Para la función sub_subrutina(), la variable "a" es una variable no local, porque su valor proviene de una función intermedia.
Ejemplo de variable libre no local - Paso 6
def subrutina():
def sub_subrutina():
print(a)
return
a = 3
sub_subrutina()
print(a)
return
a = 4
subrutina()
print(a)
| 3
|
La instrucción return indica el final de la función y continúa la ejecución del programa tras la llamada a la función.
Ejemplo de variable libre no local - Paso 7
def subrutina():
def sub_subrutina():
print(a)
return
a = 3
sub_subrutina()
print(a)
return
a = 4
subrutina()
print(a)
| 3
3
|
La tercera instrucción de la función subrutina() escribe el valor de la variable local "a", es decir, 3.
Ejemplo de variable libre no local - Paso 8
def subrutina():
def sub_subrutina():
print(a)
return
a = 3
sub_subrutina()
print(a)
return
a = 4
subrutina()
print(a)
| 3
3
|
La instrucción return indica el final de la función y continúa la ejecución del programa tras la llamada a la función.
Ejemplo de variable libre no local - Paso 9
def subrutina():
def sub_subrutina():
print(a)
return
a = 3
sub_subrutina()
print(a)
return
a = 4
subrutina()
print(a)
| 3
3
4
|
La última instrucción del programa escribe el valor de la variable global "a", 4.
- Si a una variable que Python considera libre (porque no se le asigna valor en la función) tampoco se le asigna valor en niveles superiores, Python dará un mensaje de error, como muestra el programa siguiente:
Ejemplo de variable libre no definida
def subrutina():
print(a)
return
subrutina()
print(a)
| Traceback (most recent call last):
File "ejemplo.py", line 5, in <module>
subrutina()
File "ejemplo.py", line 2, in subrutina
print(a)
NameError: global name 'a' is not defined
|
Ejemplo de variable libre no definida - Paso 1
def subrutina():
print(a)
return
subrutina()
print(a)
| |
La primera instrucción del programa llama a la función subrutina().
Ejemplo de variable libre no definida - Paso 2
def subrutina():
print(a)
return
subrutina()
print(a)
| Traceback (most recent call last):
File "ejemplo.py", line 5, in <module>
subrutina()
File "ejemplo.py", line 2, in subrutina
print(a)
NameError: global name 'a' is not defined
|
Como la función no asigna valor a la variable "a", Python la considera variable libre y busca su valor en niveles superiores, en este caso el programa principal. Pero como en el programa principal tampoco se asigna valor a la variable "a", se produce un error.
Nota: El programa hubiera dado error de todas formas en la última instrucción del programa, que también imprimía el valor de la variable "a" no definida.
Variables declaradas global o nonlocal
- Si queremos asignar valor a una variable en una subrutina, pero no queremos que Python la considere local, debemos declararla en la función como global o nonlocal, como muestran los ejemplos siguientes:
- En el ejemplo siguiente la variable se declara como global, para que su valor sea el del programa principal:
Ejemplo de variable declarada global
def subrutina():
global a
print(a)
a = 1
return
a = 5
subrutina()
print(a)
| 5
1
|
Puede ver la ejecución paso a paso de este programa utilizando los iconos de avance y retroceso situados abajo a la derecha.
Ejemplo de variable declarada global - Paso 1
def subrutina():
global a
print(a)
a = 1
return
a = 5
subrutina()
print(a)
| |
La primera instrucción del programa asigna el valor 5 a la variable "a".
Ejemplo de variable declarada global- Paso 2
def subrutina():
global a
print(a)
a = 1
return
a = 5
subrutina()
print(a)
| |
A continuación se llama a la función subrutina().
Ejemplo de variable declarada global - Paso 3
def subrutina():
global a
print(a)
a = 1
return
a = 5
subrutina()
print(a)
| |
Al declarar global la variable "a", la variable "a" de la función y la variable "a" del programa principal son la misma variable.
Ejemplo de variable declarada global - Paso 4
def subrutina():
global a
print(a)
a = 1
return
a = 5
subrutina()
print(a)
| 5 |
La segunda instrucción de la función escribe el valor de la variable "a", es decir, 5, puesto que se trata de la misma variable "a" del programa principal.
Ejemplo de variable declarada global - Paso 5
def subrutina():
global a
print(a)
a = 1
return
a = 5
subrutina()
print(a)
| 5
|
La siguiente instrucción cambia el valor de la variable "a" a 1.
Ejemplo de variable declarada global - Paso 6
def subrutina():
global a
print(a)
a = 1
return
a = 5
subrutina()
print(a)
| 5
|
La instrucción return indica el final de la función y continúa la ejecución del programa tras la llamada a la función.
Ejemplo de variable declarada global - Paso 7
def subrutina():
global a
print(a)
a = 1
return
a = 5
subrutina()
print(a)
| 5
1
|
La última instrucción del programa escribe el valor de la variable global "a", que es ahora 1, puesto que la función ha modificado el valor de la variable.
- En el ejemplo siguiente la variable se declara como nonlocal, para que su
- valor sea el de la función intermedia:
Ejemplo de variable declarada nonlocal
def subrutina():
def sub_subrutina():
nonlocal a
print(a)
a = 1
return
a = 3
sub_subrutina()
print(a)
return
a = 4
subrutina()
print(a)
| 3
1
4
|
Ejemplo de variable declarada nonlocal - Paso 1
def subrutina():
def sub_subrutina():
nonlocal a
print(a)
a = 1
return
a = 3
sub_subrutina()
print(a)
return
a = 4
subrutina()
print(a)
| |
La primera instrucción del programa asigna el valor 4 a la variable "a".
Ejemplo de variable declarada nonlocal - Paso 2
def subrutina():
def sub_subrutina():
nonlocal a
print(a)
a = 1
return
a = 3
sub_subrutina()
print(a)
return
a = 4
subrutina()
print(a)
| |
A continuación se llama a la función subrutina().
Ejemplo de variable declarada nonlocal - Paso 3
def subrutina():
def sub_subrutina():
nonlocal a
print(a)
a = 1
return
a = 3
sub_subrutina()
print(a)
return
a = 4
subrutina()
print(a)
| |
La primera instrucción de la función subrutina() asigna el valor 3 a la variable "a", así que esta variable "a" será una variable local.
Ejemplo de variable declarada nonlocal - Paso 4
def subrutina():
def sub_subrutina():
nonlocal a
print(a)
a = 1
return
a = 3
sub_subrutina()
print(a)
return
a = 4
subrutina()
print(a)
| |
A continuación se llama a la función sub_subrutina().
Ejemplo de variable declarada nonlocal - Paso 5
def subrutina():
def sub_subrutina():
nonlocal a
print(a)
a = 1
return
a = 3
sub_subrutina()
print(a)
return
a = 4
subrutina()
print(a)
| |
Al declarar nonlocal la variable "a", Python busca en los niveles superiores, por orden, una variable que también se llame "a", que en este caso se encuentra en la función subrutina(). Python toma el valor de esa variable, es decir, 3.
Ejemplo de variable declarada nonlocal - Paso 6
def subrutina():
def sub_subrutina():
nonlocal a
print(a)
a = 1
return
a = 3
sub_subrutina()
print(a)
return
a = 4
subrutina()
print(a)
| 3
|
La primera instrucción de la función sub_subrutina() escribe el valor de la variable no local "a", es decir, 3.
Ejemplo de variable declarada nonlocal - Paso 7
def subrutina():
def sub_subrutina():
nonlocal a
print(a)
a = 1
return
a = 3
sub_subrutina()
print(a)
return
a = 4
subrutina()
print(a)
| 3
|
La segunda instrucción de la función sub_subrutina() cambia el valor de la variable "a" a 1.
Ejemplo de variable declarada nonlocal - Paso 8
def subrutina():
def sub_subrutina():
nonlocal a
print(a)
a = 1
return
a = 3
sub_subrutina()
print(a)
return
a = 4
subrutina()
print(a)
| 3
|
La instrucción return indica el final de la función y continúa la ejecución del programa tras la llamada a la función.
Ejemplo de variable declarada nonlocal - Paso 9
def subrutina():
def sub_subrutina():
nonlocal a
print(a)
a = 1
return
a = 3
sub_subrutina()
print(a)
return
a = 4
subrutina()
print(a)
| 3
1
|
La tercera instrucción de la función subrutina() escribe el valor de la variable local "a", es decir, 1.
Ejemplo de variable declarada nonlocal - Paso 10
def subrutina():
def sub_subrutina():
nonlocal a
print(a)
a = 1
return
a = 3
sub_subrutina()
print(a)
return
a = 4
subrutina()
print(a)
| 3
1
|
La instrucción return indica el final de la función y continúa la ejecución del programa tras la llamada a la función.
Ejemplo de variable declarada nonlocal - Paso 11
def subrutina():
def sub_subrutina():
nonlocal a
print(a)
a = 1
return
a = 3
sub_subrutina()
print(a)
return
a = 4
subrutina()
print(a)
| 3
1
4
|
La última instrucción del programa escribe el valor de la variable global "a", que sigue siendo 4, puesto que ninguna función la ha modificado.
- Si a una variable declarada global o nonlocal en una función no se le asigna valor en el nivel superior correspondiente, Python dará un error de sintaxis, como muestra el programa siguiente:
Ejemplo de variable declarada nonlocal no definida
def subrutina():
def sub_subrutina():
nonlocal a
print(a)
a = 1
return
sub_subrutina()
print(a)
return
a = 4
subrutina()
print(a)
|
|
Como funciona el valor de retorno
El comando de retorno en Python especifica que valor se devolverá cuando se llama una función.
Veamos un ejemplo:
Paso 1: Aquí veremos cuando la función no tiene retorno. Por ejemplo, queremos hacer el cuadrado de 4 y que nos devuelva 16 cuando se ejecute la función. Esto lo logramos haciendo "print x * x", pero cuando se llama a la función "print cuadrado" la salida será "None". Esto se debe a que cuando se llama a la función, la recursividad no sucede y se cae al final de la función.
 |
Resultado None |
Paso 2: Para ver esto más claro, reemplazaremos el comando de impresión con una asignación y veremos la salida:
http://www.mclibre.org/consultar/python/lecciones/python_funciones_2.html |
Resultado None |
Cuando se ejecuta "print cuadrado(4)" lo que hace es devolver el valor del objeto y como no tiene ninguna función específica devuelve "None"
Paso 3: Ahora vamos a ver como recuperar la salida con el comando "return". Cuando se utiliza la función "return" y ejecutamos el código, obtendremos el valor 16.
 |
Función "return" |
Paso 4: Las funciones en python son en si un objeto, y un objeto tiene un cierto valor. Ahora vamos a ver como trata un objeto Python. Cuando se ejecuta "print cuadrado", el comando devuelve el valor del objeto. Puesto que no hemos pasado ningún argumento, no tenemos ninguna función específica así que devuelve un valor predeterminado (0x7f2a22fcc578) que es la ubicación del objeto. En la práctica de Python, es probable que nunca tengas que hacer esto.
 |
Ubicación del objeto en Python |
Argumentos en funciones
El argumento es un valor que se pasa a la función cuando se llama. En otras palabras, cuando se llama a la función es un argumento y cuando se declara la función es un parámetro.
Veamos como funciona un argumento en Python
Paso 1 - Los argumentos se declaran cuando se crea la función.
Paso 2 - Para declarar un valor predeterminado en el argumento, lo hacemos asignándolo cuando definimos la función:
Ejemplo: x no tiene ningún valor predeterminado y el valor por defecto de y = 0. Cuando suministramos solo un argumento y llamamos a la función "multiplicar", Python asigna el valor suministrado para x y mantiene el valor de y = 0. Por lo tanto la multiplicación de x * y será 0.
 |
Asignando valor a un argumento en Python |
Paso 3 - Esta vez vamos a cambiar el valor de y = 2 en lugar de 0, y esto nos dará la salida (4x2)=8.
 |
Cambiando el valor al argumento |
Paso 4 - También podemos cambiar el orden de como se van a pasar los argumentos en Python. Acá invertimos el orden del valor de x e y para x = 4 e y = 2.
 |
Invirtiendo el orden de los argumentos |
Paso 5 - Múltiples argumentos también se pueden pasar como una matriz. En este ejemplo llamamos múltiples argumentos (1,2,3,4,5) con la función (*args).
 |
Múltiples argumentos en Python |
Tips:
- Hay una gran confusión en Python sobre los métodos y las funciones. Los métodos en python están asociados a instancias de objetos mientras que las funciones no. Cuando Python llama un método, se une el primer parámetro de la llamada a la referencia del objeto apropiado. En términos simples, una función independiente en Python es una "función", en tanto una función que es un atributo de una clase o una instancia es un "método".
Conclusión: Una función en Python es una pieza de código que puede realizar una o varias tareas y que puede ser re utilizada en cualquier parte del código.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Fuente: http://www.guru99.com/functions-in-python.html
No hay comentarios:
Publicar un comentario