mardi, juillet 21, 2009

Découverte de Python

Cela faisait un petit moment que je voulais apprendre les bases de python... Quelques remarques que j'ai notées pendant que je déroulais le tutorial officiel
Général
  • Le nom Python vient des 'Monthy Python' pas du serpent > ce qui rend le laguage tout de suite plus sympatique ;)
  • Ca semble s'inspirer assez du C
    Ex: le print() me rappelle le print du C avec des améliorations
  • Utilisation de l'indentation plutôt que les {}...
    pourquoi pas, au moins ça évite les troll interminables sur les { à la fin d'une ligne ou au début de la ligne suivante :p
    Troll qui a dû au moins me prendre 2 journées de ma vie si on cumule toutes les discussions inutiles
  • Les types de base : list (qui sont aussi des stack, queue), set, dictionary (alias map en java) mais je n'ai pas compris la difference avec les tuples
  • Je trouve étrange d'introduire les complexes (i) dans le tutorial ?! Même si cette fonctionnalité est intéressante, elle ne sert pas tout les jours (jamais ?!)
Les plus
  • List/Tableau = même combat
    Contrairement à Java ou les 2 types de classes sont clairement séparées
    En Python ou Ruby la différence à beaucoup moins d'importance et c'est mieux
  • On peut itérer dans les chaines de caractères comme dans un tableau:
b = 'azerty'
for x in b:
print(x)
  • String indice ou slice
    Un peu surpris au début par la manipulation de chaines avec les indices (slices) mais on s'y habitue bien :)
    Et même ça me semble assez puissant ! (a voir si c'est lisible dans un programme plus complexe ou écrit par quelqu'un d'autre...)
>>> word = 'Help' + 'A'
>>> word[4]
'A'
>>> word[0:2]
'He'
>>> word[2:4]
'lp'
>>> word[:2]    # The first two characters
'He'
>>> word[2:]    # Everything except the first two characters
'lpA'
  • Une boucle for peut avoir un else
    Ca semble intéressant mais si je ne vois pas bien l'utilité (cas où il y a un break dans le for)
for x in range(2, n):
if n % x == 0:
  print(n, 'equals', x, '*', n//x)
  break
else:
  # loop fell through without finding a factor
  print(n, 'is a prime number')
Les moins
  • Pas de switch / case mais if ... elif ... elif ...
    Je trouve que les switch/case (même si je ne les utilise pas souvent) expriment mieux ce qu'on veut faire dans ces cas là et la synthaxe est plus concise...
    En java j'ai tendance à considérer pleins de elseif comme un code smell qu'il faudrait autre chose: un switch/case dans le cas les plus simple ou un pattern type builder ou command pour les cas les plus complexe
    Peut-etre juste un habitude à prendre
  • Ruby semble plus orienté object, exemple taille d'une chaine de char
python: len('azerty')
ruby: 'azerty'.size