PDF de programación - ['Python'] * 40 - Cuarenta características de Python que quizás no conoces

Imágen de pdf [

['Python'] * 40 - Cuarenta características de Python que quizás no conocesgráfica de visualizaciones

Publicado el 14 de Enero del 2017
1.739 visualizaciones desde el 14 de Enero del 2017
2,6 MB
141 paginas
Creado hace 10a (15/01/2014)
["Python"] * 40

Cuarenta características de Python que quizás no conoces
Víctor Terrón — http://github.com/vterron

Introducción

Unknown Unknowns

unknowns. That is to say there are things that we now know we

don’t know. But there are also unknown unknowns. There are things

“There are things we know that we know. There are known

we do not know we don’t know” [Donald Rumsfeld, 2002]

En Python hay funcionalidades increíbles, imprescindibles una
vez que las conoces, que podríamos no echar en falta jamás
porque ni siquiera sabíamos que existían.

El propósito de esta charla es presentar una serie de aspectos
interesantes de Python que en estos años he descubierto que
mucha gente, incluso programadores veteranos, desconoce.

Víctor Terrón (IAA-CSIC)

["Python"] * 40

23 de noviembre de 2013

2

Introducción

Unknown Unknowns

Algunas de las funcionalidades que vamos a discutir
aquí son muy prácticas y otras curiosidades de
indiscutiblemente escasa o nula utilidad en nuestro
día a día. Pero todos ellos son conceptos sencillos de
entender y que merece la pena saber que están ahí,
incluso si no los usamos... por ahora.
Tenemos 1:15 minutos para cada uno de los puntos,
así que muchos de ellos sólo vamos a poder verlos
muy por encima. Pero al menos habrán dejado de ser
unknown unknowns.

Víctor Terrón (IAA-CSIC)

["Python"] * 40

23 de noviembre de 2013

3

Introducción

¡No os limitéis a escuchar!

No suele ser divertido escuchar a nadie hablar durante casi
una hora. Participad, intervenid, criticad, opinad. ¡Si digo

algo que no tiene ningún sentido, corregidme!

El código fuente está disponible en:

http://github.com/vterron/PyConES-2013

Erratas, correcciones, enlaces interesantes...

¿enviará alguien algún pull request antes de que termine esta charla?

Víctor Terrón (IAA-CSIC)

["Python"] * 40

23 de noviembre de 2013

4

Introducción

¿Listos?

Víctor Terrón (IAA-CSIC)

["Python"] * 40

23 de noviembre de 2013

5

Los diez primeros

1. Intercambiar dos variables

Normalmente, en otros lenguajes de programación,

tenemos que usar una variable temporal para almacenar

uno de los dos valores.

Por ejemplo, en C

int x , y;
int tmp ;
tmp = x;
x = y;
y = x;

Víctor Terrón (IAA-CSIC)

["Python"] * 40

23 de noviembre de 2013

6

Los diez primeros

1. Intercambiar dos variables
Python nos permite hacer

a, b = b, a

>>> a = 5
>>> b = 7
>>> a, b = b, a
>>> a
7
>>> b
5

Víctor Terrón (IAA-CSIC)

["Python"] * 40

23 de noviembre de 2013

7

Los diez primeros

1. Intercambiar dos variables

Desde nuestro punto de vista, ambas asignaciones ocurren

simultáneamente. La clave está en que tanto

a, b como b, a son tuplas.

Las expresiones en Python se evalúan de izquierda a
derecha. En una asignación, el lado derecho se evalúa
antes que el derecho. Por tanto:

El lado derecho de la asignación es evaluado, creando
una tupla de dos elementos en memoria, cuyos
elementos son los objetos designados por los
identificadores b y a.

Víctor Terrón (IAA-CSIC)

["Python"] * 40

23 de noviembre de 2013

8

Los diez primeros

1. Intercambiar dos variables

El lado izquierdo es evaluado: Python ve que estamos
asignando una tupla de dos elementos a otra tupla de
dos elementos, así que desempaqueta (tuple unpack)
la tupla y los asigna uno a uno:

Al primer elemento de la tupla de la izquierda, a, le
asigna el primer elemento de la tupla que se ha creado en
memoria a la derecha, el objeto que antes tenía el
identificador b. Así, el nuevo a es el antiguo b.

Del mismo modo, el nuevo b pasa a ser el antiguo a.

Explicación detallada en Stack Overflow:

http://stackoverflow.com/a/14836456/184363

Víctor Terrón (IAA-CSIC)

["Python"] * 40

23 de noviembre de 2013

9

Los diez primeros

1. Intercambiar dos variables

¿Cómo se declara una tupla de un único elemento?

o, para más claridad,

1,

(1,)

Es la coma, no el paréntesis, el constructor de la tupla

Víctor Terrón (IAA-CSIC)

["Python"] * 40

23 de noviembre de 2013

10

Los diez primeros

1. Intercambiar dos variables

Los paréntesis por sí mismos no crean una tupla: Python evalúa la

expresión dentro de los mismos y devuelve el valor resultante:

Esto sólo suma dos números

>>> 2 + (1)
3

Esto intenta sumar entero y tupla (y fracasa)

>>> 2 + (1 ,)
Traceback ( most recent call last ):

File " <stdin >" , line 1, in <module >

TypeError : unsupported operand type (s) for +: ’int ’ and ’ tuple ’

Víctor Terrón (IAA-CSIC)

["Python"] * 40

23 de noviembre de 2013

11

Los diez primeros

2. Encadenamiento de operadores lógicos

En vez de escribir

x => y and y < z

A diferencia de C, todos los operadores lógicos tienen la misma

prioridad, y pueden ser encadenados de forma arbitraria.

Mucho mejor

x <= y < z

Las dos expresiones de arriba son equivalentes, aunque en la segunda
x sólo se evalúa una vez. En ambos casos, z no llega a evaluarse si

no se cumple que x <= y (lazy evaluation).

Víctor Terrón (IAA-CSIC)

["Python"] * 40

23 de noviembre de 2013

12

Los diez primeros

3. 0.1 + 0.2 != 0.3

¿Por qué 0.1 + 0.2 == 0.3 es False?

>>> 0.1 + 0.2 == 0.3
False

Porque los números flotantes se representan internamente,

en cualquier ordenador, como fracciones binarias. Por

ejemplo, 1.25 es equivalente a 1/2 + 3/4.

Víctor Terrón (IAA-CSIC)

["Python"] * 40

23 de noviembre de 2013

13

Los diez primeros

3. 0.1 + 0.2 != 0.3

La mayor parte de las fracciones decimales no puede ser representada

exactamente con una fracción binaria. Lo máximo que los números flotantes

pueden hacer es aproximar su valor real — con bastantes decimales, pero nunca

el exacto.

>>> print " %.30 f" % 0.1
0.100000000000000005551115123126
>>> print " %.30 f" % 0.2
0.200000000000000011102230246252
>>> print " %.30 f" % 0.3
0.299999999999999988897769753748

Lo mismo ocurre en base decimal con, por ejemplo, el número 1/3. Por más
decimales con que se represente, 0.333333... no deja de ser una aproximación.

Víctor Terrón (IAA-CSIC)

["Python"] * 40

23 de noviembre de 2013

14

Los diez primeros

3. 0.1 + 0.2 != 0.3

Normalmente no somos conscientes de esto porque Python por defecto nos

muestra una aproximación del valor real de los números flotantes,

redondeándolos a una representación práctica para nosotros.

>>> print 0.1
0.1
>>> print 0.2
0.2
>>> print 0.3
0.3
>>> 0.1 + 0.2
0.30000000000000004

Floating Point Arithmetic: Issues and Limitations

http://docs.python.org/2/tutorial/floatingpoint.html

Víctor Terrón (IAA-CSIC)

["Python"] * 40

23 de noviembre de 2013

15

Los diez primeros

3. 0.1 + 0.2 != 0.3

Nunca deberíamos comparar números flotantes directamente

Una opción, simple, es comprobar si ambos valores son lo

"suficientemente iguales" usando un valor máximo de error absoluto

admisible, normalmente llamado epsilon.

>>> epsilon = 1e -10
>>> abs ((0.1 + 0.2) - 0.3) < epsilon
True
>>> abs ((0.1 + 0.2) - 0.3)
5.5511151231257827 e -17

Víctor Terrón (IAA-CSIC)

["Python"] * 40

23 de noviembre de 2013

16

Los diez primeros

3. 0.1 + 0.2 != 0.3

En caso de no conocer el rango de los números

con los que vamos a trabajar, tenemos que
compararlos en términos de error relativo

("son iguales al 99.999%).

Comparing Floating Point Numbers, 2012 Edition

http://randomascii.wordpress.com/2012/02/25/

comparing-floating-point-numbers-2012-edition/

Víctor Terrón (IAA-CSIC)

["Python"] * 40

23 de noviembre de 2013

17

Los diez primeros

3. 0.1 + 0.2 != 0.3

En Python tenemos el módulo decimal

>>> import decimal
>>> x = decimal . Decimal (" 0.1 ")
>>> y = decimal . Decimal (" 0.2 ")
>>> z = decimal . Decimal (" 0.3 ")
>>> x + y == z
True

decimal — Decimal fixed point and floating point arithmetic

http://docs.python.org/2/library/decimal.html

Víctor Terrón (IAA-CSIC)

["Python"] * 40

23 de noviembre de 2013

18

Los diez primeros

4. int(True) == 1

El valor numérico de True es 1; el de False, 0

>>> int ( True )
1
>>> int ( False )
0
>>> 37 + True
38
>>> 7 / False
Traceback ( most recent call last ):

File " <stdin >" , line 1, in <module >

ZeroDivisionError : float division

Víctor Terrón (IAA-CSIC)

["Python"] * 40

23 de noviembre de 2013

19

Los diez primeros

4. int(True) == 1

De hecho, la clase bool hereda de int

>>> issubclass ( bool , int )
True
>>> isinstance ( True , int )
True
>>> bool . mro ()
[< type ’bool ’>, <type ’int ’>, <type ’ object ’ >]

PEP 285: Adding a bool type [2002]

http://www.python.org/dev/peps/pep-0285/

Víctor Terrón (IAA-CSIC)

["Python"] * 40

23 de noviembre de 2013

20

Los diez primeros

5. import this

El Zen de Python

Los principios filosóficos en los que se cimenta Python

>>> import this
The Zen of Python , by Tim Peters

Beautiful is better than ugly .
Explicit is better than implicit .
Simple is better than complex .
Complex is better than complicated .
Flat is better than nested .
Sparse is better than dense .
Readability counts .
[...]

PEP 20: The Zen of Python [2004]

http://www.python.org/dev/peps/pep-0020/

Víctor Terrón (IAA-CSIC)

["Python"] * 40

23 de noviembre de 2013

21

Los diez primeros

5. import this

Algo bastante más desconocido: el contenido del módulo this.py
está cifrado con el algoritmo ROT13 — cada letra sustituida por la

que está trece posiciones por delante en el alfabeto:

>>> import inspect
>>> print inspect . getsource ( this )
s = """ Gur Mra bs Clguba , ol Gvz Crgref

Ornhgvshy vf orggre guna htyl .
Rkcyvpvg vf orggre guna vzcyvpvg .
Fvzcyr vf orggre guna pbzcyrk .
Pbzcyrk vf orggre guna pbzcyvpngrq .
Syng vf orggre guna arfgrq .
Fcnefr vf orggre guna qrafr .
Ernqnovyvgl pbhagf .
[...]

http://www.wefearchange.org/2010/06/import-this-and-zen-of-python.html

this and The Zen of Python

Víctor Terrón (IAA-CSIC)

["Python"] * 40

23 de noviembre de 2013

22

Los diez primeros

6. El módulo antigravedad

import antigravity

http://xkcd.com/353/

Añadido en Python 3, pero también está disponible en Python 2.7

Víctor Terrón (IAA-CSIC)

["Python"] * 40

23 de noviembre de 2013

23

Los diez primeros

6. El módulo antigra
  • Links de descarga
http://lwp-l.com/pdf1522

Comentarios de: ['Python'] * 40 - Cuarenta características de Python que quizás no conoces (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad