Journal map() est mort ! longue vie à imap() !

Posté par  .
Étiquettes : aucune
0
15
jan.
2006
La programmation Python peut s'avérer relativement frustrante pour les débutants, lorsqu'ils découvrent avec bonheur les fonctions map(), zip(), reduce() etc..: ils commencent à en user et abuser dans leurs programmes.

Puis vient la phase de la dépression profonde, lorsqu'ils découvrent que toutes ces primitives sont vouées à disparaître...

Mais pourquoi diable continuent-elles à être documentées, sans même signaler leur disparition future dans le manuel de référence de la version 2.4 !!!

http://www.python.org/doc/2.4/tut/node7.html

tout simplement parce que cet écran d'aide est à peu de choses prêt un copier-coller de la 2.3, 2.2, :'(

En attendant, militons pour itertools !

http://programmation-python.org/sections/blog/2006_01_15_le-(...)
  • # map, zip, reduce

    Posté par  (site web personnel) . Évalué à 3.

    Tiens, je me rends compte que je n'ai jamais utilisé zip, et que je ne vois pas trop a quoi il peut servir.
    Pour map, je serais contre son retrait, même si je l'utilise de moins en moins au profit de la version "algébrique" : [ f(x) for x in l] fait la même chose que map(f, l) et me "parle" plus.
    Quant à reduce, je l'aime beaucoup et je ne saurais pas m'en passer.

    Et "on" voudrait remplacer ça par des itérateurs ? Je vais retourner à ocaml si python ne veut plus être à mon goût...
    • [^] # Re: map, zip, reduce

      Posté par  . Évalué à 4.

      zip() est anecdotique mais parfois utile, il permet de combiner des séquences:

      >>> a = ['t', 't']
      >>> b = ['o', 'o']
      >>> zip(a, b)
      [('t', 'o'), ('t', 'o')]

      Sinon, plus d'infos de GvR himself sur le sujet (et surtout sur reduce()):
      http://www.artima.com/weblogs/viewpost.jsp?thread=98196
    • [^] # Re: map, zip, reduce

      Posté par  (site web personnel) . Évalué à 7.

      zip est très pratique pour faire des opérations en parallèles sur deux séquences.

      A propos des iterateurs, les expressions génératrices sont une manières très élégante de faire de la programmation fonctionnelle en python :

      (f(x) for x in l) est équivalent à [f(x) for x in l] mais retourne un générateur (avec évalutation retardée) ce qui évite de construire toute une liste chargée en mémoire même si seul les premiers éléments ne sont utilisés. imap fait l'opération correspondante pour la fonction map.

      Donc contrairement à toi je trouve que python évolue dans la bonne direction : on peut faire de la programmation (pseudo-)fonctionnelle efficace en python.

      Et pour ceux qui aiment OCaml et ses functors (et les autres aussi :), on peut retrouver ce type de feelings en python avec la Zope Component Architecture :
      http://griddlenoise.blogspot.com/2005/12/zope-component-arch(...)

      Il n'y a pas besoin de tout Zope3, seuls les deux modules zope.interface et zope.component sont à ajouter dans son python path. Ca fait du code modulaire et vraiment réutilisable :)
    • [^] # Re: map, zip, reduce

      Posté par  . Évalué à 4.

      Quand à parler de version "algébrique", je pense que la version map(f,l) mérite beaucoup plus le qualificatif d'algébrique que [f(x) fr x in l], parce qu'elle correspond beaucoup plus au mode de fonctionnement algébrique.

      En tant qu'individu complètement déformé par les maths, je suis contre la suppression de map et lambda!

      PS : ma construction préférée en python est le map(lambda...)
  • # imap?

    Posté par  . Évalué à 1.

    cool je vais pouvoir lire mes mail

    -->[]
  • # Espoir quand tu nous tiens

    Posté par  . Évalué à 2.


    Puis vient la phase de la dépression profonde, lorsqu'ils découvrent que toutes ces primitives sont vouées à disparaître...


    Pourquoi elle sont dépréciées ?
    Tout simplement parce qu'elles font doublons avec les listes en compréhensions

    http://www.python.org/doc/2.4/tut/node7.html#SECTION00714000(...)


    en attendant pour les inconditionnels de la programmation fonctionnelle
    http://www-128.ibm.com/developerworks/linux/library/l-prog.h(...)
    http://www-128.ibm.com/developerworks/linux/library/l-prog2.(...)

    http://www-128.ibm.com/developerworks/linux/library/l-cpyite(...)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.