La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Curso de Python Clase 5 Dpto. Telemática CUJAE Curso

Presentaciones similares


Presentación del tema: "Curso de Python Clase 5 Dpto. Telemática CUJAE Curso"— Transcripción de la presentación:

1 Curso de Python Clase 5 Dpto. Telemática CUJAE Curso 2003-2004

2 Objetivos Dpto. Telemática CUJAE Curso 2003-2004 1.Ver reglas que rigen el ámbito de las variables dentro de una función. Aprender como funcionan los “espacios de nombres”. 2.Conocer nuevas funciones y tipos de datos. 3.Ver trabajo de excepciones en Python.

3 Funciones Dpto. Telemática CUJAE Curso 2003-2004 Cada vez que una función se ejecuta se crea un nuevo espacio de nombres. Este espacio de nombres contiene los nombres de los parámetros de la función, más los nombres de las variables que se le hayan asignado algún valor dentro del cuerpo de la función. En la resolución de nombres el intérprete siempre busca en el espacio de nombres local. Si el nombre no es encontrado, entonces el intérprete busca en el espacio de nombre global.

4 Funciones Dpto. Telemática CUJAE Curso 2003-2004 El espacio de nombres global para una función es el espacio de nombre del módulo donde la misma fue definida. Programa de ejemplo: a = 15 def example(a,b): print a,b,c c +=10 c =3 example(1,2) print c

5 Funciones Dpto. Telemática CUJAE Curso 2003-2004 Si el intérprete no encuentra en el espacio global el nombre buscado, entonces busca en el espacio de nombre incorporado por el lenguaje. Si no es encontrado en este último lugar, ocurre un error. Programa de ejemplo: def example(a): print abs(a) def abs(x): return “My abs” example(-15)

6 Funciones Dpto. Telemática CUJAE Curso 2003-2004 Los espacios de nombres en Python son almacenados como diccionarios. Para obtener el espacio de nombres local se puede utilizar la función “locals”. Para obtener el espacio de nombres global se puede utilizar la funcion “globals”.

7 Funciones Dpto. Telemática CUJAE Curso 2003-2004 Programa de ejemplo: def example(a, b): c = a + b print “Espacio de nombres\ global: ”, globals() print “Espacio de nombres\ local: ”, locals() example(1,2) CCC = ‘asdas’ example(3,4)

8 Funciones Dpto. Telemática CUJAE Curso 2003-2004 Las reglas de búsquedas de identificadores en los espacios de nombres se pueden alterar con la sentencia “global”. Esta sentencia permite especificar que una lista de nombres pertenece al espacio de nombre global. La misma puede repetirse y aparecer en cualquier lugar dentro del cuerpo de una función.

9 Funciones Dpto. Telemática CUJAE Curso 2003-2004 Programa de ejemplo: a = 15 def example(a,b): print a,b,c global c c = 10 c =3 example(1,2) print c

10 Funciones Dpto. Telemática CUJAE Curso 2003-2004 Todas las versiones de Python permiten funciones anidadas. Sin embargo antes de la versión 2.1, las funciones anidadas no proveían espacios de nombres anidados. Como resultado de esto, un programa que use funciones anidadas podría funcionar de una manera inesperada en una versión de Python anterior a la 2.1. En caso de que existan los espacios anidados, la búsqueda de un nombre o identificador se hace de la misma manera, solo que antes de buscar en el espacio de nombre global, se hace en los anidados.

11 Funciones Dpto. Telemática CUJAE Curso 2003-2004 Programa de ejemplo: def bar(): x = 10 def spam(): print 'x is ', x while x > 0: spam() x -= 1

12 Funciones Dpto. Telemática CUJAE Curso 2003-2004 Programa de ejemplo: def AAA(): aaa = 15 def AA(): aa = 14 print "Global: ", globals() print "\n\nLocal: ", locals() AA() AAA()

13 Funciones Dpto. Telemática CUJAE Curso 2003-2004 En Python las funciones también son objetos creados como vimos en las diapositivas anteriores. Este tipo de objeto pertenece a la categoría de “Objetos que pueden ser llamados”. La única operación permitida sobre un objeto de tipo función es llamar al mismo “Nombre(Lista_de_Argumentos)”. Existen diferencias entre las funciones definidas por el usuario y las incorporadas por el lenguaje, por tanto las mismas no pertenecen a un mismo tipo de objeto. La siguiente tabla muestra atributos que tienen las funciones definidas por el usuario.

14 Funciones Dpto. Telemática CUJAE Curso 2003-2004 f.__doc__ Cadena de documentación f.__name__ Nombre de la función f.__dict__ Diccionario que contiene los atributos de la función. f.func_code Código compilado. f.func_defaults Tupla con los argumentos por defecto. f.globals Diccionario que contiene el espacio de nombres global. f.func_closure Tupla que contiene datos relativo a ámbitos anidados.

15 Funciones Dpto. Telemática CUJAE Curso 2003-2004 Programa de ejemplo: def f(a =15): print ‘Esto es una prueba’ a = []; a.append(f) a[0].__name__ f.func_defaults

16 Funciones Dpto. Telemática CUJAE Curso 2003-2004 En Python existe un límite para las llamadas a funciones recursivas. La función “sys.getrecursionlimit()” devuelve el número máximo de llamdas recursivas (por defecto 1000). La función “sys.setrecursionlimit() ” es utilizada para cambiar este valor. Ejemplo: x = 1020 def inexample(): global x; print x if x: x -= 1; inexample()

17 Funciones Dpto. Telemática CUJAE Curso 2003-2004 La sentencia “lambda” se utiliza para crear funciones anónimas. Tiene la forma: lambda argumentos: expresión Donde “argumentos” es una lista separada de argumentos y “expresión” es una expresión en la cual están presentes dichos argumentos. El código que define “expresión” debe ser una expresión válidad y no puede tener sentencias como “print”, etc. Las reglas de ámbito para variables son las mismas que las de las funciones comunes.

18 Funciones Dpto. Telemática CUJAE Curso 2003-2004 Programa de ejemplo: a = lambda x,y: x+y b = lambda x: x.ljust(20) print a(2,3) print b(´Test´)

19 Funciones Dpto. Telemática CUJAE Curso 2003-2004 La función “map” tiene la siguiente forma: t = map(func, s,.. ) Donde la función “func” es llamda pasándole como parámetro cada elemento de la secuencia “s”. En caso de que más de una secuencia sea pasada como parámetro, “func” debe tener tantos parámetros como secuencias hayan sido pasadas. Cuando una de las listas pasadas como parámetro sea más corta que las otras, será extendida con el objeto “None”.

20 Funciones Dpto. Telemática CUJAE Curso 2003-2004 Esta función siempre devuelve una lista. Si “func” es “None”, la función identidad es asumida. Programa de ejemplo: def foo(x): return 3*x a = [1,2,3,4,5,6]; b = map(foo, a) print map(None, b) def foo1(a,b): return a**b print map(foo1, a,b) print map(None, a,b) print map(lambda x: 2*x, a)

21 Funciones Dpto. Telemática CUJAE Curso 2003-2004 La función “reduce” acumula información sobre una secuencia y retorna un valor. Tiene la siguiente forma: reduce(func, s, [init]) La función “func” es aplicada a los dos primeros elementos de la secuencia “s” y el resultado junto con el próximo elemento se le pasa a “func” una vez más hasta que se agoten los elementos de “s”.

22 Funciones Dpto. Telemática CUJAE Curso 2003-2004 En caso de que “init” sea especificado, a los efectos de la función “reduce” es como si se hubiese insertado al inicio de la secuencia. Programa de ejemplo: a = [0,1,2,3,4,5,6,7,8,9] def sum(x,y): return x+y b = reduce(sum, a) print b

23 Funciones Dpto. Telemática CUJAE Curso 2003-2004 La función “filter” tiene la siguiente forma: filter(func, s) Esta función devuelve una lista que contiene aquellos elementos de la secuencia “s” que al ser pasados como parámetros a la función “func”, la misma devuelve “True”. Si “s” es una cadena de caracteres, una tupla o una lista, el resultado será una cadana de caracteres, una tupla o una lista respectivamente.

24 Funciones Dpto. Telemática CUJAE Curso 2003-2004 En casos de que “func” sea “None” la función identidad es asumida. Programa de ejemplo: a = [0, 0xA, 2, 010, 3, 5, 6] b = filter(lambda x: x < 4, a) print b c = filter(None, a) def odd(x): return x % 2 print c, “\n”, filter(odd, a)

25 Funciones Dpto. Telemática CUJAE Curso 2003-2004 “list comprehensions” es otra manera de crear listas sin tener que recurir al uso de “map”, “filter” o “lambda”. Las definiciones de listas usando estas últimas sentencias suelen ser menos claras que las que resultan de usar “list comprehensions”. Cada ““list comprehensions”” consiste en una expresión seguida de una sentencia “for”, seguida posiblemente por sentencias “for” o “if”.

26 Funciones Dpto. Telemática CUJAE Curso 2003-2004 [expression for item1 in sequence1 for item2 in sequence2... for itemN in sequenceN if condition] El resultado es una lista, que se forma al evaluar la expresión en el contexto de las sentencias “for” e “if” que la siguen. Si la expresión debe ser evaluada como una tupa, los paréntesis son requeridos.

27 Funciones Dpto. Telemática CUJAE Curso 2003-2004 Programa de ejemplo: [3*i for i in range(5)] a = ‘Esto es una prueba’ [3*x for x in a] [(x,y) for x in range(5) for y in range(5,10)] [(x,y*x) for x in range(9) for y in 'ABC' if x%2]

28 Funciones Dpto. Telemática CUJAE Curso 2003-2004 Todas las versiones de Python permiten funciones anidadas. Sin embargo antes de la versión 2.1, las funciones anidadas no proveían espacios de nombres anidados. Como resultado de esto, un programa que use funciones anidadas podría funcionar de una manera inesperada en una versión de Python previa a la 2.1.

29 Funciones Dpto. Telemática CUJAE Curso 2003-2004 Todas las versiones de Python permiten funciones anidadas. Sin embargo antes de la versión 2.1, las funciones anidadas no proveían espacios de nombres anidados. Como resultado de esto, un programa que use funciones anidadas podría funcionar de una manera inesperada en una version de Python previa a la 2.1.

30 Funciones Dpto. Telemática CUJAE Curso 2003-2004 Todas las versiones de Python permiten funciones anidadas. Sin embargo antes de la versión 2.1, las funciones anidadas no proveían espacios de nombres anidados. Como resultado de esto, un programa que use funciones anidadas podría funcionar de una manera inesperada en una version de Python previa a la 2.1.

31 Funciones Dpto. Telemática CUJAE Curso 2003-2004 Todas las versiones de Python permiten funciones anidadas. Sin embargo antes de la versión 2.1, las funciones anidadas no proveían espacios de nombres anidados. Como resultado de esto, un programa que use funciones anidadas podría funcionar de una manera inesperada en una version de Python previa a la 2.1.

32 Funciones Dpto. Telemática CUJAE Curso 2003-2004 Todas las versiones de Python permiten funciones anidadas. Sin embargo antes de la versión 2.1, las funciones anidadas no proveían espacios de nombres anidados. Como resultado de esto, un programa que use funciones anidadas podría funcionar de una manera inesperada en una version de Python previa a la 2.1.

33 Funciones Dpto. Telemática CUJAE Curso 2003-2004 Todas las versiones de Python permiten funciones anidadas. Sin embargo antes de la versión 2.1, las funciones anidadas no proveían espacios de nombres anidados. Como resultado de esto, un programa que use funciones anidadas podría funcionar de una manera inesperada en una version de Python previa a la 2.1.

34 Funciones Dpto. Telemática CUJAE Curso 2003-2004 Todas las versiones de Python permiten funciones anidadas. Sin embargo antes de la versión 2.1, las funciones anidadas no proveían espacios de nombres anidados. Como resultado de esto, un programa que use funciones anidadas podría funcionar de una manera inesperada en una version de Python previa a la 2.1.

35 Funciones Dpto. Telemática CUJAE Curso 2003-2004 Todas las versiones de Python permiten funciones anidadas. Sin embargo antes de la versión 2.1, las funciones anidadas no proveían espacios de nombres anidados. Como resultado de esto, un programa que use funciones anidadas podría funcionar de una manera inesperada en una version de Python previa a la 2.1.

36 Funciones Dpto. Telemática CUJAE Curso 2003-2004 Todas las versiones de Python permiten funciones anidadas. Sin embargo antes de la versión 2.1, las funciones anidadas no proveían espacios de nombres anidados. Como resultado de esto, un programa que use funciones anidadas podría funcionar de una manera inesperada en una version de Python previa a la 2.1.

37 Funciones Dpto. Telemática CUJAE Curso 2003-2004 Todas las versiones de Python permiten funciones anidadas. Sin embargo antes de la versión 2.1, las funciones anidadas no proveían espacios de nombres anidados. Como resultado de esto, un programa que use funciones anidadas podría funcionar de una manera inesperada en una version de Python previa a la 2.1.

38 Funciones Dpto. Telemática CUJAE Curso 2003-2004 Todas las versiones de Python permiten funciones anidadas. Sin embargo antes de la versión 2.1, las funciones anidadas no proveían espacios de nombres anidados. Como resultado de esto, un programa que use funciones anidadas podría funcionar de una manera inesperada en una version de Python previa a la 2.1.

39 Funciones Dpto. Telemática CUJAE Curso 2003-2004 Todas las versiones de Python permiten funciones anidadas. Sin embargo antes de la versión 2.1, las funciones anidadas no proveían espacios de nombres anidados. Como resultado de esto, un programa que use funciones anidadas podría funcionar de una manera inesperada en una version de Python previa a la 2.1.

40 Funciones Dpto. Telemática CUJAE Curso 2003-2004 Todas las versiones de Python permiten funciones anidadas. Sin embargo antes de la versión 2.1, las funciones anidadas no proveían espacios de nombres anidados. Como resultado de esto, un programa que use funciones anidadas podría funcionar de una manera inesperada en una version de Python previa a la 2.1.

41 Funciones Dpto. Telemática CUJAE Curso 2003-2004 Todas las versiones de Python permiten funciones anidadas. Sin embargo antes de la versión 2.1, las funciones anidadas no proveían espacios de nombres anidados. Como resultado de esto, un programa que use funciones anidadas podría funcionar de una manera inesperada en una version de Python previa a la 2.1.

42 Funciones Dpto. Telemática CUJAE Curso 2003-2004 Todas las versiones de Python permiten funciones anidadas. Sin embargo antes de la versión 2.1, las funciones anidadas no proveían espacios de nombres anidados. Como resultado de esto, un programa que use funciones anidadas podría funcionar de una manera inesperada en una version de Python previa a la 2.1.

43 Funciones Dpto. Telemática CUJAE Curso 2003-2004 Todas las versiones de Python permiten funciones anidadas. Sin embargo antes de la versión 2.1, las funciones anidadas no proveían espacios de nombres anidados. Como resultado de esto, un programa que use funciones anidadas podría funcionar de una manera inesperada en una version de Python previa a la 2.1.

44 Funciones Dpto. Telemática CUJAE Curso 2003-2004 Todas las versiones de Python permiten funciones anidadas. Sin embargo antes de la versión 2.1, las funciones anidadas no proveían espacios de nombres anidados. Como resultado de esto, un programa que use funciones anidadas podría funcionar de una manera inesperada en una version de Python previa a la 2.1.

45 Funciones Dpto. Telemática CUJAE Curso 2003-2004 Todas las versiones de Python permiten funciones anidadas. Sin embargo antes de la versión 2.1, las funciones anidadas no proveían espacios de nombres anidados. Como resultado de esto, un programa que use funciones anidadas podría funcionar de una manera inesperada en una version de Python previa a la 2.1.

46 Funciones Dpto. Telemática CUJAE Curso 2003-2004 Todas las versiones de Python permiten funciones anidadas. Sin embargo antes de la versión 2.1, las funciones anidadas no proveían espacios de nombres anidados. Como resultado de esto, un programa que use funciones anidadas podría funcionar de una manera inesperada en una version de Python previa a la 2.1.

47 Funciones Dpto. Telemática CUJAE Curso 2003-2004 Todas las versiones de Python permiten funciones anidadas. Sin embargo antes de la versión 2.1, las funciones anidadas no proveían espacios de nombres anidados. Como resultado de esto, un programa que use funciones anidadas podría funcionar de una manera inesperada en una version de Python previa a la 2.1.

48 FIN Dpto. Telemática CUJAE Curso 2003-2004 Por favor, nos sería muy útil que cualquier sugerencia o error que encontrase en el presente documento nos lo hicieran llegar a: frankabel@tesla.cujae.edu.cu


Descargar ppt "Curso de Python Clase 5 Dpto. Telemática CUJAE Curso"

Presentaciones similares


Anuncios Google