You are on page 1of 6

Universidad de Santiago de Chile Facultad de Ingeniera Fundamentos de Computacin y Programacin

Usando funciones en Python


Tal y como las calculadoras cientficas, Python provee un nmero de funciones que podemos utilizar. A estas funciones se les llama nativas, built-in en ingls. En el siguiente ejemplo, se muestra el uso de dos funciones nativas: valor absoluto y potencia. Ejemplo 1
>>> 2 >>> 2 >>> 8 >>> 9 >>> abs(2) abs(-2) pow(2, 3) pow(3, 2)

En las primeras lneas del ejemplo, la funcin abs() es aplicada al valor 2 y -2. Esto se logra indicando los valores en los parntesis que acompaan al nombre de la funcin. Formalmente, a esos valores se les llama parmetros actuales, o argumentos, de la funcin y es sobre estos parmetros actuales que la funcin se aplica. Notemos que la funcin pow() requiere dos parmetros: la mantisa y el exponente. Para que funcione, debemos indicar ambos argumentos separados con una coma. Podemos extender la funcionalidad de Python agregndole funciones importadas. Estas no vienen nativamente con el intrprete, sino que se encuentran en bibliotecas para que sean consultadas por l. A estas bibliotecas de Python se les conoce como mdulos. Uno de los mdulos que nos ser de utilidad es math, que contiene muchas de las funciones matemticas y trigonomtricas que usamos. La siguiente tabla lista algunas de las funciones que podemos destacar. Nombre
sin(x) cos(x) tan(x) exp(x) log(x) log10(x) sqrt(x) degrees(x) radians(x)

Descripcin Seno de x, con x expresado en radianes Coseno de x, con x expresado en radianes Tangente de x, con x expresado en radianes Nmero e elevado a x Logaritmo natural (base e) de x Logaritmo en base decimal de x Raz cuadrada de x Convierte a grados un ngulo x expresado en radianes Convierte a radianes un ngulo x expresado en grados.

Universidad de Santiago de Chile Facultad de Ingeniera Fundamentos de Computacin y Programacin

Probemos en el intrprete de Python la funcin sin().

Ejemplo 2
>>> sin(0) Traceback (most recent call last): File "<pyshell#0>", line 1, in <module> sin(0) NameError: name 'sin' is not defined >>>

Podemos darnos cuenta que ocurri un error. Esto fue debido a que no hemos indicado al intrprete que consulte el mdulo math. Para esto debemos usar la sentencia import y en nombre del mdulo. Ejemplo 3
>>> import math >>> math.sin(0) 0.0 >>> sin(0) Traceback (most recent call last): File "<pyshell#2>", line 1, in <module> sin(0) NameError: name 'sin' is not defined >>>

Podemos notar que a pesar de importar el mdulo math ocurri un error al invocar la funcin como lo hubiramos hecho con las funciones nativas. Pero el error no ocurri cuando especificamos explcitamente el nombre del mdulo (separado con un punto del nombre de la funcin). Esto podemos corregirlo. Ejemplo 4
>>> from math import sin, cos >>> cos(0) 1.0 >>> sin(0) 0.0 >>>

Universidad de Santiago de Chile Facultad de Ingeniera Fundamentos de Computacin y Programacin

Con lo anterior, pudimos importar las funciones seno y coseno, lo que nos permite usarlas escribiendo slo su nombre y los parmetros actuales correspondientes. Pregunta 1 Declare un par de variables x e y con valores 1 y 2 respectivamente. Luego utilice funciones trigonomtricas del mdulo math para obtener el resultado de la siguiente frmula: ) ) )) ) ) ))

Adems del resultado, anote todo el cdigo requerido para obtener el resultado, incluyendo los mdulos importados.

Sabemos que cada da los computadores se usan para ms cosas. Obviamente, es imposible que el lenguaje de programacin contenga, nativamente o por medio de mdulos, todas las funciones que podamos necesitar. Por esta razn, Python nos da la opcin de definir nuestras propias funciones. Por ejemplo, supongamos que necesitamos calcular el valor de:
) ) )

(1)

cuando x vale 1, 2 y 3. Podramos escribir en Python las expresiones correspondientes: Ejemplo 5


>>> 2 ** (2 * (1 - 1) ** 2) +3 ** (2 * (1 - 1) ** 2) + 4 ** (2 * (1 - 1) ** 2) 3 >>> 2 ** (2 * (2 - 1) ** 2) +3 ** (2 * (2 - 1) ** 2) + 4 ** (2 * (2 - 1) ** 2) 29 >>> 2 ** (2 * (3 - 1) ** 2) +3 ** (2 * (3 - 1) ** 2) + 4 ** (2 * (3 - 1) ** 2) 72353 >>>

Nos sale bastante largo. Pero podemos notar que en cada expresin se repite 2 * (1 1) ** 2, 2 * (2 - 1) ** 2 y 2 * (1 - 1) ** 2, varias veces. Podramos evitar escribir tantas veces la misma sub-expresin? S! Para esto, miremos la frmula 1. Es obvio que el exponente es el mismo en cada trmino, y que el valor depende de una variable matemtica x. Podemos encapsular el clculo de este exponente como una funcin de una variable en memoria x: 3

Universidad de Santiago de Chile Facultad de Ingeniera Fundamentos de Computacin y Programacin Ejemplo 5


>>> def calculaExponente(x): valorExponente = 2 * (x - 1) ** 2 return valorExponente >>> calculaExponente(1) 0 >>> calculaExponente(2) 2 >>> calculaExponente(3) 8 >>> 2 ** calculaExponente(1) calculaExponente(1) 3 >>> 2 ** calculaExponente(2) calculaExponente(2) 29 >>> 2 ** calculaExponente(3) calculaExponente(3) 72353 >>>

+ + +

3 3 3

** ** **

calculaExponente(1) calculaExponente(2) calculaExponente(3)

+ + +

4 4 4

** ** **

Podemos ver que al definir nuestra propia funcin calculaExponente(), podemos utilizarla como una funcin ms de Python. El nombre escogido para esta funcin sigue la convencin entre programadores: el nombre debe ser indicativo de lo que hace la funcin y debe partir con un verbo; si el nombre contiene ms de una palabra, stas deben escribirse con la primera letra en maysculas. Fijmonos ahora en la sintaxis que utilizamos para declarar la funcin. sta se compone de dos partes: el encabezado de la funcin y el cuerpo de la funcin. El encabezado parte con la palabra reservada def, seguida del nombre de la funcin, que debe ser un identificador vlido segn las reglas de Python. Este es el nombre con el que nos referiremos a la funcin en el resto de la sesin con el intrprete de Python. Luego, entre parntesis, indicamos los parmetros formales de la funcin. Estos son los nombres que se utilizan al interior de la funcin para referirse a los argumentos que se le entregan al invocarla. El encabezado termina con un signo dos puntos, indicando que ahora se comienza el cuerpo de la funcin. El cuerpo de la funcin corresponde al bloque de sentencias que deben ejecutarse al evaluar la funcin. En este caso, el bloque se compone de dos sentencias. La primera calcula el valor del exponente necesitado, utilizando una expresin que incluye el parmetro formal de la funcin, y lo asigna a una variable denominada valorExponente. La segunda, utiliza la sentencia return para que la funcin devuelva el valor de esta variable como resultado de su evaluacin.

Universidad de Santiago de Chile Facultad de Ingeniera Fundamentos de Computacin y Programacin Notemos que el cuerpo de la funcin se escribe indentado1 respecto al encabezado de la funcin, es decir tienen una sangra mayor desde el margen izquierdo. Es importante que recordemos que todas las sentencias de un mismo bloque tienen la misma indentacin.

Es ms, para marcar sintcticamente el fin de la declaracin de una funcin, se deja una lnea en blanco sin indentar. , Pregunta 2 Escriba una funcin que calcule la frmula 1 completa para un cierto valor de x y que utilice la funcin calculaExponente().

Veamos algo ms relacionado con funciones. Consideremos el siguiente cdigo. Ejemplo 6


>>> divisor = 4 >>> >>> def formula2(base): divisor = 4 * base potencia = 4 ** base return potencia / divisor >>> def formula3(base): potencia = 2 ** (base + 1) return potencia / divisor >>> resultado1 = formula2(4) >>> resultado2 = formula3(4) >>> print divisor, resultado1, resultado2

Si nos fijamos, la variable divisor recibe un valor en la primera sentencia. Luego aparece recibiendo un valor en el cuerpo de la funcin formula2, y siendo usada en la lnea siguiente. Finalmente es usada en el cuerpo de la formula3. Qu valores desplegar la ltima sentencia? Para responder esta pregunta, primero debemos saber que la variable divisor que aparece dentro del cuerpo de la funcin formula2 es una variable local, esto significa que est definida slo para ese bloque, incluso no se crea hasta que la funcin es

Anglicismo de uso comn por gente que programa

Universidad de Santiago de Chile Facultad de Ingeniera Fundamentos de Computacin y Programacin invocada2 y se elimina cuando la ejecucin de la funcin termina. Es esta misma variable local la que es utilizada en la expresin de la sentencia de retorno. En segundo lugar, debemos saber que la variable divisor que aparece en la primera lnea del ejemplo 6 declara una variable global, lo que significa que est definida para todas las sentencias que siguen, excepto para bloques que tengan una variable local con el mismo nombre. As, es esta variable la que se usa en la expresin de la sentencia de retorno de la funcin formula3 y en la sentencia print de la ltima sentencia. As, el primer valor que se despliega en pantalla es un 4, asignado a la variable global divisor. Al ejecutar formula2 con parmetro actual 4, la variable local divisor toma el valor 16, la variable local potencia toma el valor 256, por lo que el segundo valor desplegado es 16. Al ejecutar formula3 con parmetro actual 4, la variable local potencia toma el valor 32, el que divide por el valor de la variable global divisor, por lo que el tercer valor desplegado es 8. Importante Usar variables globales en el cuerpo de una funcin es una mala prctica de programacin. Lo mejor es encapsular el comportamiento completo de una funcin que utilice slo parmetros formales y variables locales en su cuerpo. Slo usaremos variables globales para almacenar valores constantes que no requerirn ser cambiados en el resto del programa, como por ejemplo el valor del nmero .

Pregunta 3 Escriba una funcin que defina una variable local con el mismo nombre que una variable global, pero que utilice la variable global en la primera sentencia de su cuerpo. Qu le parece al intrprete de Python al intentar ejecutarla? Pregunta 4 Escriba las sentencias necesarias para evaluar la frmula:

Anglicismo de uso comn por gente que programa

You might also like