Post on 23-Feb-2017
transcript
Jordi Riera● Software developer @ Rodeo FX● Founder @ cgstudiomap.org● 8 ans à écrire du python
● kender.jr@gmail.com● @jordiriera_cg● https://www.linkedin.com/in/jordirieracg/● https://github.com/foutoucour/
How To Train Your PythonLes bases sur les iterables
Iterables+ de 10 types d’iterables
liste, et pas que● List & deque● Tuple & namedtuple● String● Set & frozenset● Dict, Ordereddict, ChainMap, Counter & defaultdict● Generators● Range, zip, map, file object, et autres.
Lequel choisir?
Lequel choisir?● List, deque, tuple, string, generators, Ordereddict: ordonnés● Tuple, frozenset: immuables (well... kind of... :( )● Set & frozenset: caractère unique● Dict, Ordereddict, ChainMap, Counter & defaultdict: mapping● String: ... ben... string quoi...● Generators, range, zip, map, etc: optimisation, consommation
for looplanguages = [‘php’, ‘ruby’, ‘python’]frameworks = [‘symfony’, ‘ruby on rails’, ‘django’]
for i in range(len(languages)): print(languages[i] + ‘: ’ + frameworks[i])
for looplanguages = [‘php’, ‘ruby’, ‘python’]frameworks = [‘symfony’, ‘ruby on rails’, ‘django’]
for i, language in enumerate(languages): print(‘: ’.join([language, frameworks[i]]))
for language, framework in zip(languages, frameworks): print(‘: ’.join([language, framework]))
Setrandom_numbers = [ 3, 4, 4, 1, 2, 3, 1]
set(random_numbers)>>> {1, 2, 3, 4}
frozenset(random_numbers)>>> frozenset({1, 2, 3, 4})
SetSets acceptent les opérations mathématiques:● Union● Intersection● Difference● Et d’autres opérations
plus chelou, mais ça fait de jolies figures
dict, feel the powa!
mapping = dict() # ou {}for language, framework in zip(languages, frameworks): if not language in languages: mapping[language] = []
mapping[language].append(framework)
dict
mapping = defaultdict(list)for language, framework in zip(languages, frameworks): mapping[language].append(framework)
mapping = {}for l, framework in zip(languages, frameworks): mapping.setdefault(l, []).append(framework)
dict
dictmapping = {‘php’:[‘symfony’], ‘ruby’:[’ruby on rails’], ‘python’:[’django’]}
for language in mapping: print(language)
for language, frameworks in mapping.items(): print(language, frameworks)
dictmapping = {‘php’:[‘symfony’], ‘ruby’:[’ruby on rails’], ‘python’:[’django’]}
print(mapping[‘python’])del mapping[‘python’] print(mapping.get(‘python’, ‘flask’))Mapping[‘python’] = ‘pyramid’
muabilité# Les listes sont muables. Elles peuvent être mis à jour:
list1 = [1,]list1.append(2)list1 == [1, 2]
Et d’autres méthodes...
list2 = [1,]list2.insert(0, 2)list2 == [2, 1]
muabilité# Cool mais...
list2 = list1list1.append(3)list2 == [1, 2, 3]
# list2 “pointe” vers list1. # list1 et list2 sont la même liste en fait...
muabilité# Solutionlist2 = list1[:]
# list2 est une liste avec tous les éléments de list1
# you’re welcome ;)
# Les tuples sont immuables, # ils ne peuvent pas être mis à jour:tuple1 = (1,)tuple1.append(2)Raise AttributeError
immuabilité
# enfin...list1 = [1,]tuple1 = (1, list1) list1.append(2)tuple1 == (1, [1, 2])
# pas cool bro!
immuabilité
Compréhension à la portée de tous!
list1 = [x for x in z if not x == ‘foo’]
gen = (x for x in z if not x == ‘foo’)# Nope c’est pas un tuple! Mais un générateur.
set1 = {x for x in z if not x == ‘foo’}
dic1 = {x: x.bar for x in z if not x == ‘foo’}
Questions?
● kender.jr@gmail.com● @jordiriera_cg● https://www.linkedin.com/in/jordirieracg/● https://github.com/foutoucour/