Definición de funciones en Python
Definición de funciones en Python
En esta parte del tutorial de programación en Python, hablaremos sobre las funciones.
Una función es un fragmento de código en un programa. La función realiza una tarea específica. Las ventajas
de usar funciones son:
Reutilización de código
Ocultamiento de información
Las funciones en Python son ciudadanos de primera clase. Esto significa que las funciones tienen un estatus igual al de otros
objetos en Python. Las funciones se pueden asignar a variables, almacenar en colecciones o pasar como
los argumentos. Esto aporta flexibilidad adicional al lenguaje.
Hay dos tipos básicos de funciones. Funciones incorporadas y funciones definidas por el usuario. Las funciones incorporadas
las funciones son parte del lenguaje Python. Ejemplos son:dir(), len()oabs(). El usuario
las funciones definidas son funciones creadas con eldefpalabra clave.
Definiendo funciones
Se crea una función con eldefpalabra clave. Las declaraciones en el bloque de la función deben ser
con sangría.
def funcion():
pasar
Eldefla palabra clave es seguida por el nombre de la función con paréntesis y dos puntos. El
las declaraciones identificadas forman el cuerpo de la función.
La función se ejecuta más tarde cuando es necesaria. Decimos que llamamos a la función. Si llamamos a una
función, las instrucciones dentro del cuerpo de la función se ejecutan. No se ejecutan hasta que el
se llama a la función.
miFunc()
"""
El script [Link] muestra cómo trabajar con
funciones en Python.
Jan Bodnar
ZetCode, 2011
"""
def mostrarNombreDelModulo():
imprimir __doc__
def obtenerArchivoModulo():
return __file__
a = mostrarNombreDelModulo()
b = obtenerArchivoDelMódulo()
imprimir a, b
La cadena en la parte superior del script se llama cadena de documentación. Documenta el actual
script. El archivo en el que ponemos código Python se llama amodule. Definimos dos funciones. La
la primera función imprimirá la cadena de documentación del módulo. La segundadevolverel camino de nuestro módulo.
La función puede o no devolver un valor. Si explícitamente no devuelven un valor, lo hacen implícitamente
volverNinguno. El__documento__y__archivo__son atributos especiales del estado. Tenga en cuenta que hay dos
guiones bajos a ambos lados del atributo.
$ ./[Link]
Ninguno ./[Link]
Las definiciones de funciones deben preceder su uso. De lo contrario, el intérprete se quejará con un
NameError.
#!/usr/bin/python
def f1():
print "f1()"
f1()
#f2()
def f2():
print "f2()"
En el ejemplo anterior tenemos dos definiciones de funciones. Una línea está comentada. Llamada a la función
no puede estar por delante de su definición.
#f2()
def f2():
print "f2()"
Podemos llamar alf2()solo después de su definición. Al descomentar la línea obtendremos unError de nombre.
#!/usr/bin/python
clase Algunos:
@estático
def f():
imprimir "método f()"
def f():
print "función f()"
def g():
def f():
print "f() función interna"
f()
Algunos.f()
f()
g()
En este ejemplo, definimos una función f() en todos los lugares posibles.
clase Alguno:
@estático
def f():
print "método f()"
def f():
print "función f()"
def g():
def f():
print "f() función interna"
f()
Aquí elf()la función está definida dentro de otrag()función. Es una función interna.
Algun.f()
f()
g()
El método estático se llama especificando el nombre de la clase, el operador punto y el nombre de la función
con corchetes cuadrados. Otras funciones se llaman usando sus nombres y corchetes cuadrados.
$ ./[Link]
método f()
función f()
función interna f()
Esta es la salida.
#!/usr/bin/python
def f():
Esta función imprime un mensaje
Hoy es un día nublado
imprimir f.func_doc
imprimir f.func_name
def f():
Esta función imprime un mensaje
Hoy es un día nublado
imprimir id(f)
Cada objeto en Python tiene un identificador ú[Link]()la función devuelve el id del objeto.
imprimir f.func_doc
imprimir f.func_name
Los objetos pueden tener atributos. Aquí imprimimos dos atributos de la función.
$ ./[Link]
Verdadero
3077407212
Esta función imprime un mensaje
f
#!/usr/bin/python
def f():
pausar
def g():
pasar
def h(f):
print id(f)
a = (f, g, h)
para i en a:
imprimir i
h(f)
h(g)
Definimos tres funciones. Las colocamos en una tupla y las pasamos a una función.
a = (f, g, h)
por i en a:
imprimir i
Colocamos tres objetos de función en una tupla y la recorremos con un bucle for.
h(f)
h(g)
$ ./[Link]
<función f en 0xb7664fb4>
<función g en 0xb766c1b4>
<función h en 0xb766c3ac>
3076935604
3076964788
Salida de [Link].
#!/usr/bin/python
def cubo(x):
return x * x * x
imprimir abs(-1)
imprimir cubo(9)
imprimir sqrt(81)
def cubo(x):
return x * x * x
imprimir abs(-1)
Elabs()la función es una función integrada fácilmente accesible. Es parte del núcleo del lenguaje.
#!/usr/bin/python
def mostrarMensaje(msg):
imprimir mensaje
def cubo(x):
return x * x * x
x = cubo(3)
imprimir x
Cálculo finalizado.
imprimir mostrarMensaje("Listo.")
Tenemos dos funciones definidas. Una utiliza eldevolverpalabra clave, uno no lo hace.
def mostrarMensaje(msg):
imprimir mensaje
def cubo(x):
return x * x * x
La función cube() calcula una expresión y devuelve su resultado con elretornarpalabra clave.
x = cubo(3)
Computation finished.
imprimir mostrarMensaje("Listo.")
Este código produce dos líneas. Una es un mensaje impreso por elmostrarMensaje()función. El
el otro es elNingunovalor, que se envía implícitamente por funciones sin elvolverdeclaración.
$ ./[Link]
27
Cálculo terminado.
Listo.
Ninguno
Ejemplo de salida.
Podemos enviar más de un valor desde una función. Los objetos después deldevolverlas palabras clave son
separados por comas.
#!/usr/bin/python
n = [1, 2, 3, 4, 5]
def estadisticas(x):
mx = máximo(x)
mn = min(x)
ln = len(x)
sm = suma(x)
Elvolverla palabra clave devuelve cuatro números. Los números están separados por una coma
carácter. De hecho, hemos enviado una tupla que contiene estos cuatro valores. También podríamos devolver una lista.
en lugar de una tupla.
mx
$ ./[Link]
(5, 1, 5, 15)
5 1 5 15
Salida.
Redefinición de función
Python es dinámico por naturaleza. Es posible redefinir una función que ya ha sido definida.
#!/usr/bin/python
def mostrarMensaje(msg):
print msg
mostrarMensaje("Listo.")
def mostrarMensaje(msg):
print strftime("%H:%M:%S", gmtime()),
imprimir mensaje
mostrarMensaje("Procesando.")
Definimos unmostrarMensaje()función. Más tarde proporcionamos una nueva definición de la misma función.
Del módulo de tiempo importamos dos funciones que se utilizan para calcular la hora actual.
def mostrarMensaje(msg):
imprimir msg
def mostrarMensaje(msg):
imprimir strftime("%H:%M:%S", gmtime()),
imprimir mensaje
$ ./[Link]
Listo.
23:49:33 Procesando.
Argumentos de función
La mayoría de las funciones aceptan argumentos. Los argumentos son valores que se envían a la función. El
las funciones procesan los valores y opcionalmente devuelven algún valor.
#!/usr/bin/python
def C2F(c):
return c * 9/5 + 32
imprimir C2F(100)
imprimir C2F(0)
imprimir C2F(30)
En nuestro ejemplo, convertimos la temperatura Celsius a Fahrenheit. ElC2F()la función acepta uno
argumento c, que es la temperatura en Celsius.
$ ./[Link]
212
32
86
Los argumentos en las funciones de Python pueden tener valores implícitos. Se utiliza un valor implícito si no hay
se proporciona valor.
#!/usr/bin/python
def potencia(x, y=2):
r = 1
para i en rango(y):
r = r * x
returnar r
imprimir potencia(3)
imprimir potencia(3, 3)
imprimir potencia(5, 5)
Aquí creamos una función de potencia. La función tiene un argumento con un valor implícito. Podemos
llama a la función con uno o dos argumentos.
$ ./[Link]
9
27
3125
Las funciones de Python pueden especificar sus argumentos con una palabra clave. Esto significa que al llamar a un
función, especificamos tanto una palabra clave como un valor. Cuando tenemos múltiples argumentos y estos son
Usado sin palabras clave, el orden en el que pasamos esos argumentos es crucial. Si esperamos un
nombre, edad o sexo en una función sin palabras clave, no podemos cambiar su orden. Si usamos
palabras clave, podemos.
#!/usr/bin/python
En este ejemplo, el orden en el que especificamos los argumentos es importante. De lo contrario, obtenemos
resultados incorrectos.
$ ./[Link]
Lary
Age: 43
M
Joan
Age: 24
F
#!/usr/bin/python
# [Link]
Ahora llamamos a las funciones con sus palabras clave. El orden puede cambiarse, aunque no es
se recomienda hacerlo. Tenga en cuenta que no podemos usar un argumento no clave después de un argumento clave
esto terminaría en un error de sintaxis.
Este es un concepto legal. Un argumento que no es palabra clave puede ser seguido por argumentos de palabra clave.
Esto terminará en un error de sintaxis. Un argumento no clave no puede seguir a los argumentos clave.
#!/usr/bin/python
def suma(*args):
La función devuelve la suma
de todos los valores
r = 0
para i en args:
r += i
devuelve r
imprimir suma.__doc__
imprimir suma(1, 2, 3)
imprimir suma(1, 2, 3, 4, 5)
Usamos el* operador para indicar que la función aceptará un número arbitrario de argumentos.
Elsumar()la función devolverá la suma de todos los argumentos. La primera cadena en el cuerpo de la función es
se llama a la cadena de documentación de la función. Se utiliza para documentar la función. La cadena debe ser
en comillas triples.
$ ./[Link]
La función devuelve la suma
de todos los valores
6
15
También podemos usar el** construir en nuestras funciones. En tal caso, la función aceptará un
diccionario. El diccionario tiene longitud arbitraria. Podemos entonces analizar normalmente el diccionario, como
habitual.
#!/usr/bin/python
def mostrar(**detalles):
para i en detalles:
print "%s: %s" % (i, detalles[i])
Lary
Este ejemplo demuestra tal caso. Podemos proporcionar un número arbitrario de pares clave-valor.
argumentos. La función los manejará todos.
$ ./[Link]
age: 43
Lary
M
#!/usr/bin/python
n = [1, 2, 3, 4, 5]
def f(x):
[Link]()
[Link]()
[Link](0, 0)
print "Dentro de f():", x
f(n)
En nuestro ejemplo, pasamos una lista de enteros a una función. El objeto se modifica dentro del cuerpo de
la función. Después de llamar a la función, el objeto original, la lista de enteros se modifica.
def f(x):
[Link]()
[Link]()
[Link](0, 0)
Imprimir "Dentro de f():", x
En el cuerpo de la función trabajamos con el objeto original. No con una copia del objeto. En
En muchos lenguajes de programación recibiríamos una copia de un objeto por defecto.
$ ./[Link]
Original list: [1, 2, 3, 4, 5]
Dentro de f(): [0, 1, 2, 3]
Después de la llamada a la función: [0, 1, 2, 3]
Una vez que la lista fue modificada, fue modificada para siempre.
#!/usr/bin/python
Jack
def f():
Roberto
Imprimir "Dentro de la función", nombre
Una variable definida en el cuerpo de una función tiene un alcance local. Es válida solo dentro del cuerpo de la
función.
$ ./[Link]
Función externa Jack
Dentro de la función Robert
Salida.
#!/usr/bin/python
Jack
def f():
Imprimir 'Dentro de la función', nombre
Por defecto, podemos obtener el contenido de una variable global dentro del cuerpo de una función. Pero si nosotros
si queremos cambiar una variable global en una función, debemos usar laglobalpalabra clave.
$ ./[Link]
Función externa Jack
Dentro de la función Jack
#!/usr/bin/python
Jack
def f():
nombre global
Roberto
Imprimir 'Dentro de la función', nombre
Ahora, cambiaremos el contenido de una variable de nombre global dentro de una función.
nombre global
Roberto
Usando elglobalpalabra clave, hacemos referencia a la variable definida fuera del cuerpo de la función.
Se le da un nuevo valor a la variable.
$ ./[Link]
Función externa Jack
Dentro de la función Robert
Función exterior Robert
Funciones anónimas
Es posible crear funciones anónimas en Python. Las funciones anónimas no tienen un
nombre. Con ellambdapalabra clave, se pueden crear pequeñas funciones anónimas. Anónimas
Las funciones también se llaman funciones lambda por los programadores de Python. Son parte de la
paradigma funcional incorporado en Python.
Las funciones lambda están restringidas a una sola expresión. Pueden usarse donde sea que se usen funciones normales.
se pueden utilizar funciones.
#!/usr/bin/python
y = 6
z = lambda x: x * y
imprimir z(8)
z = lambda x: x * y
EllambdaLa palabra clave crea una función anónima. La x es un parámetro que se pasa a la
función lambda. El parámetro es seguido por un carácter dos puntos. El código al lado de los dos puntos es
la expresión que se ejecuta cuando se llama a la función lambda. La función lambda es
asignado a la variable z.
imprime z(8)
La función lambda se ejecuta. El número 8 se pasa a la función anónima y se
devuelve 48 como resultado. Tenga en cuenta que z no es un nombre para esta función. Solo es una variable a la que
se asignó la función anónima.
$ ./[Link]
48
La función lambda se puede utilizar de manera elegante con otras partes funcionales del lenguaje Python.
gustarmapa()ofiltrar()funciones.
#!/usr/bin/python
En el ejemplo tenemos una lista de temperaturas en grados Celsius. Creamos una nueva lista que contiene
temperaturas en fahrenheit.
Elmapa()la función aplica la función anónima a cada elemento de la lista cs. Crea una
nueva lista de ft que contiene las temperaturas en Fahrenheit calculadas.
$ ./[Link]
[14.0, 32.0, 59.0, 86.0, 104.0]
Ejemplo de salida.