Python05

24
PYTHON Lección No. 5 M.Sc. Victor Pando Beltrán [email protected] http://www.civil-uancv.pe/ aulavirtual

description

Asignaciones múltiplesFunciones con parámetros por defecto.Funciones con una cantidad variable de parámetros.

Transcript of Python05

Page 1: Python05

PYTHONLección No. 5

M.Sc. Victor Pando Beltrán

[email protected]

http://www.civil-uancv.pe/aulavirtual

Page 2: Python05

AGENDA

Asignaciones múltiples Funciones con parámetros por defecto Funciones con una cantidad variable de

parámetros

Page 3: Python05

RECOMENDACIONES

Poner celulares en silencio No conversar mientras el expositor está

dando la charla Si te da sueño, puedes dormir pero sin roncar

:P Si hablo muy rápido favor indicármelo para

hablar más lento

Page 4: Python05

Asignaciones múltiples (1/6)

Python permite asignaciones múltiples:

x1,x2,x3=1,2,3 print x1 # 1 print x2 # 2 print x3 # 3

Para entenderlo mejor podemos también utilizar esta sintaxis:

x1,x2,x3=(1,2,3) print x1 # 1 print x2 # 2 print x3 # 3

Page 5: Python05

Asignaciones múltiples(2/6)

Es decir lo que estamos haciendo inicializar cada una de las variables de la izquierda con las componentes homólogas (de la misma posición) de la tupla.

Esta característica es útil si tenemos que recuperar por ejemplo de una lista que contiene tuplas de dos elementos que representan puntos en el plano (x,y):

puntos=[(10,2),(4,2),(9,3)] for x,y in puntos:

print 'Coordenada x:%d y:%d' % (x,y)

Page 6: Python05

Asignaciones múltiples (3/6)

Cada vuelta del for se almacena en x e y los valores de la tupla a procesar.

Otra aplicación muy útil es si queremos intercambiar el valor de dos variables la forma más simple es:

x=10 y=20 print x # 10 print y # 20 x,y = y,x print x # 20 print y # 10

Page 7: Python05

Asignaciones múltiples (4/6)

En una asignación pueden intervenir valores de distinto tipo (enteros, reales, string etc.):

nombre,edad,sueldo=('juan',32,1500.30) print 'Nombre:%s Edad:%d Sueldo%10.2f' % (nombre,edad,sueldo) # Nombre:juan Edad:32 Sueldo 1500.30

Page 8: Python05

Asignaciones múltiples (5/6)

Podemos con esto hacer que una función retorne más de un dato (por lo menos en apariencia), esto lo logramos retornando una tupla:

def sumadiferencia(x1,x2): suma=x1+x2 diferencia=x1-x2 return (suma,diferencia)

su,di=sumadiferencia(10,4) print su # 14 print di # 6

Page 9: Python05

Asignaciones múltiples (6/6)

Como vemos llamamos a una función y le asignamos el valor devuelto a dos variables.

Si queremos inicializar tres variables con el mismo valor la sintaxis que podemos utilizar es:

x1=x2=x3=10 print x1 # 10 print x2 # 10 print x3 # 10

Page 10: Python05

Problema resuelto

En una lista se almacenan tuplas con el nombre de una persona y su edad. Mostrar el nombre de la persona de mayor edad.

personas=[('juan',22),('ana',40),('carlos',15)] may=-1 for nombre,edad in personas:

if edad>may: nom=nombre may=edad

print '%s tiene la edad mayor y es de %d' % (nom,may)

Page 11: Python05

Funciones con parámetros por defecto (1/5)

Como habíamos visto una función es una estructura de programación que agrupa un conjunto de instrucciones y resuelve un problema particular. Una función puede tener parámetros, los mismos almacenan los valores que se le pasan cuando la llamamos.

En algunos casos si queremos que la función sea mas flexible podemos definir parámetros con valores por defecto. Esto nos permite llamar a la función pudiendo o no pasar datos a dichos parámetros.

Veamos con un ejemplo este concepto, vamos a desarrollar una función que reciba un dato a imprimir, con la posibilidad de indicarle el color de fuente y el color de fondo, en caso de no indicarle dichos valores la función muestra el dato con color negro y fondo blanco.

Page 12: Python05

Funciones con parámetros por defecto (2/5)

def mostrartitulo(dato,colorletra='#000',colorfondo='#fff'): print '<h1 style="color:'+colorletra+';background-color:'+colorfondo+'">'+dato+'</h1>'

mostrartitulo('Primer titulo') mostrartitulo('Segundo titulo','#f00') mostrartitulo('Tercer titulo','#f00','#000')

Como podemos ver para indicar a Python que un parámetro es por defecto debemos utilizar el operador de asignación en la declaración de la cabecera de la función junto al valor que tomará dicho parámetro en caso de no pasarlo desde donde la llamamos:

def mostrartitulo(dato,colorletra='#000',colorfondo='#fff'):

Page 13: Python05

Funciones con parámetros por defecto (3/5)

Cuando llamamos la función mostrartitulo podemos hacerlo de diferentes maneras:

mostrartitulo('Primer titulo') mostrartitulo('Segundo titulo','#f00') mostrartitulo('Tercer titulo','#f00','#000')

La primera llamada es pasando un único dato, es decir solo el título que debe mostrar, en este caso el segundo y tercer parámetro toman como valor el indicado en el declaración:

colorletra='#000',colorfondo='#fff'

Page 14: Python05

Funciones con parámetros por defecto (4/5)

Podemos llamar a la función mostrartitulo pasando el primer parámetro y el segundo, lo que hace que el tercer parámetro se inicialice con el indicado en la declaración de la función:

mostrartitulo('Segundo titulo','#f00')

En el ejemplo la tercera llamada a la función se hace pasando tres parámetros:

mostrartitulo('Tercer titulo','#f00','#000')

Page 15: Python05

Funciones con parámetros por defecto (5/5)

Como podemos ver los parámetros por defecto nos permiten implementar funciones más generales, con esto podemos hacer que las funciones sean útiles para mayor cantidad de situaciones.

Que pasa si queremos llamar la función indicando el primer y último parámetro, esto solo se puede hacer si al llamar la función indicamos que dato se le pasa a cada parámetro:

def mostrartitulo(dato,colorletra='#000',colorfondo='#fff'): print '<h1 style="color:'+colorletra+';background-color:'+colorfondo+'">'+dato+'</h1>' mostrartitulo(dato='Primer titulo',colorfondo='#00f'

Si bien se hace más engorroso la llamada a la función al tener que indicar el nombre de cada parámetro junto al valor, nos trae como beneficio que sea aún más flexible.

Page 16: Python05

Problema resuelto

Confeccionar una función que reciba un dato a imprimir, con la posibilidad de indicarle el color de fuente y el color de fondo, en caso de no indicarle dichos valores la función muestra el dato con color negro y fondo blanco.

def mostrartitulo(dato,colorletra='#000',colorfondo='#fff'): print '<h1 style="color:'+colorletra+';background-color:'+colorfondo+'">'+dato+'</h1>'

mostrartitulo('Primer titulo') mostrartitulo('Segundo titulo','#f00') mostrartitulo('Tercer titulo','#f00','#000')

Page 17: Python05

Problema Propuesto

Confeccionar una función que reciba entre 2 y 5 enteros. La misma nos debe retornar la suma de dichos valores.

def sumar(v1,v2,v3=0,v4=0,v5=0): s=v1+v2+v3+v4+v5 return s

print sumar(5,6)print sumar(1,2,3)x=sumar(1,2,3,4,5)print x

Page 18: Python05

Funciones con una cantidad variable de parámetros (1/3)

Otra posibilidad en la declaración de una función en Python es la definición de una cantidad variable de parámetros.

Para definir una cantidad variante de parámetros debemos antecederle el caracter asterísco (*) al último parámetro de la función.

Supongamos que necesitemos implementar una función que le enviemos una serie de enteros y nos retorne la suma de todos ellos (como mínimo le enviamos 2 y no hay un máximo de valores):

def sumar(x1,x2,*xn): s=x1+x2 for valor in xn: s=s+valor return s

print sumar(1,2)print sumar(1,2,3,4)print sumar(1,2,3,4,5,6,7,8,9,10)

Page 19: Python05

Funciones con una cantidad variable de parámetros (2/3)

Lo que en realidad el lenguaje Python hace es una tupla con todos los valores de los parámetros a partir del tercero.

Luego nuestro algoritmo debe recorrer la tupla para procesar los elementos propiamente dichos, en nuestro caso con un for in y los sumamos junto al primer y segundo parámetro.

Luego cuando hacemos la llamada a la función

print sumar(1,2)

Page 20: Python05

Funciones con una cantidad variable de parámetros (3/3)

Si pasamos solo dos parámetros la tupla se inicializa vacía, por lo que el for in no ejecuta el bloque contenido.

Si llamamos la función con 10 parámetros:

print sumar(1,2,3,4,5,6,7,8,9,10)

Luego la tupla se crea con 7 elementos.

Page 21: Python05

Problema resueltoImplementar una función que le enviemos una serie de enteros y nos retorne la suma de todos ellos (como mínimo le enviamos 2 y no hay un máximo de valores):

def sumar(x1,x2,*xn): s=x1+x2 for valor in xn: s=s+valor return s

print sumar(1,2)print sumar(1,2,3,4)print sumar(1,2,3,4,5,6,7,8,9,10)

Page 22: Python05

Problema Propuesto

Confeccionar una función que le envíe una serie de edades y me retorne la cantidad que son mayores a 18 (como mínimo se envía un entero a la función)

def cantidadmayor18(ed1,*edades): cant=0 if ed1>18: cant=cant+1 for e in edades: if e>18: cant=cant+1 return cant

print 'Cantidad de personas mayores a 18:'cant=cantidadmayor18(4,56,14,67,32,21)print cant

Page 23: Python05

BIBLIOGRAFÍA

Página personal de Guido van Rossum Libro texto del curso Sitio principal de Python Zona de descarga de Python Página principal de VPython Zona de descarga de VPython

Page 24: Python05