Some Python Basics
Una mica de recopilació del Show & Tell de Python en format breu
Easter eggs:
import thisimport antigravityfrom __future__ import braces
La comparació entre objectes de diferents tipus es fa entre els dos strings resultants de la funció type():
"python" > [130, 129] # True: str > list
Intercanvi de variables (per no haver de crear una tercera temporal)
a, b = b, a
squares = [x*x for x in nlist]
Generators: no guarden tot el llistat en memòria:
squares = (x*x for x in xrange(10))
Operador ternari:
a = b if b > 2 else c
Lists slicing: [start:end:step]
(no són obligatoris els 3 paràmetres)
Reverse list:
a = b[::-1]
Comprovació si hi ha un element en un iterable:
if "python" in my_list:
import this
Variable “_” com a “don’t care”, quan s’ha d’assignar una variable però no es farà servir:
for _ in xrange(10):
print "hello world"
for
i while
també té else
que s’executa sempre que acabi el loop de manera natural (sense un break).
Try
i except
també tenen else que s’executa quan no salta l’except. També hi ha finally
, que s’executa sempre.
Data Structures
Llista (ordered & mutable):
l = [1,2,3]
l = list(1,2,3)
Tupla (ordered & inmutable):
t = (1,2,3)
t = 1,2,3 -> L'operador es la coma
t = tuple([1,2,3])
Dict (assoc array & unordered):
d = {'first': 1, 'second': 2}
d = dict(first=1,second=2) (fins a 6 vegades mes lent)
Set (unordered, utilitzat per operacions com les següents):
>>> y = {1, 2, 3}
>>> z = set([2, 3, 4, 5, 6, 7])>>> # union
>>> print z | y
set([1, 2, 3, 4, 5, 6, 7])>>> # intersection
>>> print z & y
set([2, 3])>>> # difference
>>> print z-y
set([4, 5, 6, 7])>>> # symetric diference
>>> print z ^ y
set([1, 4, 5, 6, 7])
Classes
- Quan un mètode és d’instància hereda
self
però no cal que es digui self, se’n pot dir com es vulgui pero està “mal vist”. - Diferenciació entre variables de clase/instancia, les de clase les comparteixen totes les instàncies.
- Redefinició de mètodes de classe de manera dinàmica:
>>> class C():
>>> pass
>>>
>>> def init_x(c, v):
>>> c.x = v
>>>
>>> C.init_x = init_x
>>> c = C()
>>> c.init_x(50)
>>> print c.x
50
- Variables per valor: int, float, bool, str… (inmutable objects) variables per refèrencia: list, dict, set (mutable objects)
- Quan es “canvia” el valor d’un objecte inmutable el que es fa es crear un nou objecte (per veure l’id de l’objecte: id(x)):
>>> a = 2 # variable que apunta a 2
>>> a = 3 # nova variable, també anomenada a, que apunta a 3
>>> l = [2] # variable que apunta a la llista l que guarda la
referència a 2 (2 és un altre objecte, inmutable)
>>> l.append(3) # la mateixa variable en memoria però ara també
guarda la referència a 3
>>> l = [2,3] # al reassignar: nova variable
I fins aquí! Tot això no deixen ser uns apunts en “brut” d’algunes de les coses interessants que ofereix Python per fer-nos la vida més fàcil i agradable :)