lambda, reduce(), filter() apply(), map()

Le
candide
Bonjour,

Qu'est-ce que de

lambda, reduce(), filter(), apply(), map()

reste à l'identique dans Python 3.0 ?


À propos, quand Python se dotera-t-il d'une documentation digne de son zen ?
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Bruno Desthuilliers
Le #19651941
candide a écrit :
Bonjour,

Qu'est-ce que de

lambda, reduce(), filter(), apply(), map()

reste à l'identique dans Python 3.0 ?



Si mon souvenir est bon, ces fonctions sont transférées des builtins
vers un module "functional". Ce qui ne change pas grand chose dans l'absolu.


À propos, quand Python se dotera-t-il d'une documentation digne de son zen ?



??? Elle est pas zen ???
candide
Le #19652421
Bruno Desthuilliers a écrit :

Qu'est-ce que de

lambda, reduce(), filter(), apply(), map()

reste à l'identique dans Python 3.0 ?



Si mon souvenir est bon, ces fonctions sont transférées des builtins



lambda est une "fonction" ?


vers un module "functional".



Je trouve cette réponse fort peu claire mais c'est en effet ce que j'avais
/vaguement/ lu de-ci de-là.

Ce qui ne change pas grand chose dans
l'absolu.



???? Ben si ça ne change rien dans l'absolu on se demande alors pourquoi il a
été décidé que ça devait changer.




À propos, quand Python se dotera-t-il d'une documentation digne de son
zen ?



??? Elle est pas zen ???




Je n'ai pas parlé de ça : qu'une doc soit zen ne veut rien dire. Par contre, le
zen de Python ne fait même aucune allusion à la notion de documentation, il
manquerait quelque chose du genre :

documentation counts


[Je sais bien que le langage Python intègre la possibilité de documenter son
code mais c'est autre chose dont je parle ici.]

La doc de Python, qu'il s'agisse de la doc officielle (y compris le fameux
tutorial) ou de la doc habituelle (Lutz, Martelli, Dive into Python, Lie
Hetland, etc) est d'une nullité totale, très très en deçà de la qualité et des
innovations du langage. Python est un langage singulier mais pas par sa
documentation. Heureusement que le langage est par lui-même relativement simple
à prendre en main. Hélas, dès que les choses se corsent (et avec Python, tout
n'est pas si simple ni si intuitif comme cela est dit partout) la doc ne donne
pas les moyens d'apprendre ni de progresser rapidement et tout est à la charge
de celui qui veut apprendre autrement dit la doc ne joue pas son rôle, bon c'est
en fait là le schéma habituel : le trivial est sur-expliqué, le délicat est
ignoré ou bâclé. On rencontre hélas les mêmes problèmes que pour l'apprentissage
d'autres langages de programmation et plus généralement d'utilisation de
logiciel au sens large (cela va d'un utilitaire à un OS). Si Python a simplifié
la façon de coder, il n'a hélas pas simplifié la façon d'apprendre et j'ai
trouvé cela très décevant. Tout compte fait, je me demande si, bien que C++ soit
un langage plus ample, plus compliqué et plus sophistiqué, il ne soit pas plus
aisé à maitriser que Python et cela à cause d'une documentation globalement plus
abondante, plus rigoureuse et moins rugueuse.


Je ne vais pas me lancer dans une analyse pour l'instant surtout qu'il y aurait
vraiment de quoi écrire une thèse. Pour en revenir à la question initiale, où
_précisément_ la doc officielle m'explique-t-elle le devenir de ce dont j'ai
parlé dans le titre de mon post ? Ce que j'appelle la doc officielle est
l'équivalent de la Norme de langages comme C ou C++ ("The Standard") et qui chez
Python est répartie en deux documents : la documentation dite de référence et la
documentation de la bibliothèque Python.

La problématique est simple : imagine quelqu'un qui décide de commencer à
apprendre Python en 200{5..9}. Si à l'avenir (ie Python 3000) des choses aussi
couramment utilisées que map(), lamda, etc vont être mise de côté, il me semble
_évident_ que la doc (officielle mais aussi les autres) doit l'inciter à s'en
passer et lui présenter clairement les succédanés. Et bien, il ne me semble pas
que ce soit le cas. Dans l'apprentissage, il y a pour moi un principe de base :
on ne paye que pour ce qu'on va utiliser.
Alain Ketterlin
Le #19653861
candide
Qu'est-ce que de
lambda, reduce(), filter(), apply(), map()
reste à l'identique dans Python 3.0 ?



Si mon souvenir est bon, ces fonctions sont transférées des bu iltins



lambda est une "fonction" ?



lambda est un mot-clé, et une lambda-expression est une structure
particulière du langage. A ce titre, les deux sont décrits dans le
manual de référence du langage. A priori, map() et filter() reste nt
décrites dans les "Built-in functions". Les autres se retrouvent dans
functools ou itertools. Cela dit :

- le lambda de python n'est qu'une notation, on peut toujours définir et
nommer la fonction correspondante
- apply() n'a plus d'intérêt, la syntaxe permet d'appeler directe ment
une fonction sans passer par apply
- reduce() a été jugée peu utile, et il y a sum(), join() et c.
- filter() et map() peuvent être remplacées par des compréhe nsions de
liste (puis de dictionaires et d'ensembles)

Donc : ménage dans le langage, et report du reste dans les modules. Ce
n'est pas idiot comme stratégie

Ce qui ne change pas grand chose dans l'absolu.



???? Ben si ça ne change rien dans l'absolu on se demande alors
pourquoi il a été décidé que ça devait changer.



Le langage (et les usages) évoluent.

À propos, quand Python se dotera-t-il d'une documentation digne de
son zen ?







La doc de Python, qu'il s'agisse de la doc officielle (y compris le
fameux tutorial) ou de la doc habituelle (Lutz, Martelli, Dive into
Python, Lie Hetland, etc) est d'une nullité totale



C'est à mon avis largement exagéré. Il y a, globalement (don c, via
google) suffisamment de doc, et je trouve que le tutorial est pas mal.
C'est en tout cas selon moi plus agréable à utiliser que les 1000 + pages
du standard C++ (tout ça pour une bibliothèque standard riquiqui) . Je
reconnais que c'est une question de gout.

-- Alain.
William Dode
Le #19655771
On 28-06-2009, candide wrote:

...

La doc de Python, qu'il s'agisse de la doc officielle (y compris le fameux
tutorial) ou de la doc habituelle (Lutz, Martelli, Dive into Python, Lie
Hetland, etc) est d'une nullité totale, très très en deçà de la qualité et des
innovations du langage.



...

Tout compte fait, je me demande si, bien que C++ soit
un langage plus ample, plus compliqué et plus sophistiqué, il ne soit pas plus
aisé à maitriser que Python et cela à cause d'une documentation globalement plus
abondante, plus rigoureuse et moins rugueuse.



Le principe de python est que les choses simples restent simples et que
les choses complexes soient quand même possibles mais réservées aux cas
vraiment spécifiques. Il ne faut donc pas l'aborder de la même manière
qu'un langage comme le C++ où il faut d'abord connaitre les arcanes du
langage avant de pouvoir faire quelque chose de simple.

L'intro du tuto est assez claire là dessus :
"This tutorial does not attempt to be comprehensive and cover every
single feature, or even every commonly used feature. Instead, it
introduces many of Python’s most noteworthy features, and will give you
a good idea of the language’s flavor and style. After reading it, you
will be able to read and write Python modules and programs, and you will
be ready to learn more about the various Python library modules
described in the Python Library Reference."

Bref, si tu souhaite réellement te mettre au python, commence simplement
par n'utiliser que ce qui te semble évident et intuitif, laisse le reste
pour plus tard. Quand ce sera mûr tu verras que les réponses viendront
facilement.

Mais si t'essayes juste de troller, c'est pas le bon angle d'attaque.
Pour ma part c'est le premier langage que j'utilise sans avoir eu besoin
de lire un seul livre ! Le c++ c'est l'inverse, j'ai lu des livres mais
je ne l'ai jamais utilisé !

Sinon, y aussi toujours moyen de participer à la rédaction de la
documentation si tu veux faire avancer le schmilblick au lieu d'écrire
une thèse.

--
William Dodé - http://flibuste.net
Informaticien Indépendant
Alain Ketterlin
Le #19656011
candide
Alain Ketterlin a écrit :



lambda est un mot-clé, et une lambda-expression est une structure
particulière du langage.



"structure" ? bof, pas très précis.



Techniquement c'est une fermeture. L'important dans la phrase ci-dessus
c'était "expression"

Je suis allé sur le site de Python consulter la doc en ligne, plus
précisément à http://docs.python.org/index.html

Je rentre le mot-clé lambda



Ce n'est pas à la doc de python de définir ce qu'est une lambda. Les
lambda expressions sont connues depuis au moins Lisp, et viennent
directement du lambda-calcul de Church. Ce sont des notions de base en
informatique. La doc de python se contente d'expliquer comment les
écrire (et fait même un peu plus). La référence du lang age est
parfaitement claire. Et la syntaxe sans ambiguité puisque la grammaire
est donnée.

En parcourant les sous-paragraphes du paragraphe 5. Expressions, je me
rends compte que le vocabulaire employé est assez peu constant. Par
exemple, il est question de

The power operator

et plus loin

Unary arithmetic and bitwise operations



Tu chipotes, mais le manuel est cohérent. Peut-être que le premier
aurait du être "The exponentiation operation" (on est dans le chapitre
"Expressions").

lambdas-expressions (sic)



Pourquoi sic ? Le terme est parfaitement correct. D'ailleurs, si tu
avais tapé ça dans google tu aurais trouvé de la lecture.

Bon, pour en revenir à l'interrogation initiale, ta réponse ne dit pas
si l'opérateur lambda, au même titre que la fonction map() ou la
fonction reduce(), sont des obsolescences.



Tu regardes dans le manuel de référence (celui du langage pour la mbda,
celui de la bibliothèque pour les autres). Si ça y est, c'est que ça
existe maintenant. Pour le reste...

-- Alain.
Pierre Maurette
Le #19656261
Alain Ketterlin, le 28/06/2009 a écrit :

[...]

Techniquement c'est une fermeture.



C'est ce que de la documentation francophone même de qualité - je pense
à Delphi, mais à d'autres également - appelle /closure/, ou alors me
gourre-je ?

--
Pierre Maurette
Alain Ketterlin
Le #19656931
Pierre Maurette
Techniquement c'est une fermeture.



C'est ce que de la documentation francophone même de qualité - je
pense à Delphi, mais à d'autres également - appelle /closu re/, ou
alors me gourre-je ?



C'est sûrement cela, bien que j'ai l'impression d'avoir plus souvent vu
clôture que closure en français.

-- Alain.
Pierre Maurette
Le #19656991
Alain Ketterlin, le 28/06/2009 a écrit :
Pierre Maurette
Techniquement c'est une fermeture.



C'est ce que de la documentation francophone même de qualité - je
pense à Delphi, mais à d'autres également - appelle /closure/, ou
alors me gourre-je ?



C'est sûrement cela, bien que j'ai l'impression d'avoir plus souvent vu
clôture que closure en français.



Oui, j'ai lu également /clôture/. En fait, chez ceux qui ne veulent pas
d'un mot qui n'est pas au dictionnaire. Je suis plutôt favorable au
néologisme - /closure/ - dans un cadre strictement précis, avec
l'avantage de préserver le reste de la langue. Le cas de la /closure/
n'est pas très convaincant, il serait plus facile d'argumenter à partir
de /template/, par exemple.
Remarque HS, voire iconoclaste: la notion de /closure/ est assez "prise
de tête". J'ai eu besoin de piger en Delphi ou C++ Builder. Mais en
Python, je fais des trucs assez efficaces sans avoir besoin de
descendre dans les tripes du langage. Je lis avec intérêt
fr.comp.lang.python et d'autres lieux, mais j'apprécie surtout le fait
que Python est assez tolérant à l'incompétence ;-)

--
Pierre Maurette
candide
Le #19657881
Pierre Maurette a écrit :

Remarque HS, voire iconoclaste: la notion de /closure/ est assez "prise
de tête".



Vous parlez de closure au sens classique du terme (ça n'a rien à voir avec
Python) ? je cite par exemple Martelli

A nested function that accesses values from outer local variables is also known
as a closure.

En soi, ça n'a rien de compliqué mais effectivement les docs n'expliquent ni ne
contextualisent l'intérêt de la notion.


J'ai eu besoin de piger en Delphi ou C++ Builder. Mais en
Python, je fais des trucs assez efficaces sans avoir besoin de descendre
dans les tripes du langage. Je lis avec intérêt fr.comp.lang.python et
d'autres lieux, mais j'apprécie surtout le fait que Python est assez
tolérant à l'incompétence ;-)



Ce que tu dis peux être différemment interprété. En tous cas, disons que Python
ne force pas pour programmer des choses même un peu complexes à passer sous les
fourches caudines d'un certain jargon intello. Dommage que les doc que je lis ne
sachent pas s'inspirer de la simplicité et du sens de l'accessibilité originels
de Python...
Alain Ketterlin
Le #19657951
candide
Techniquement c'est une fermeture. L'important dans la phrase ci-dessus



Ah bon, c'est écrit où dans la doc ? Où alors faut aller r egarder dans les
sources de l'implémentation.


[...]

Dis, tu vas nous faire chier longtemps avec tes majuscules, tes pluriels
et tes déclarations à l'emporte pièce ? Allez je te fais un résumé : les
notions dont tu cherches les explications dans la doc de python n'ont
pas à y être expliquées, et un manuel de référence d'un langage n'a pas
à donner d'exemples. Cherche un peu de lecture sur les termes que tu ne
comprends pas, et reviens-y plus tard. Tu verras, ça va devenir limpid e.

-- Alain.
Publicité
Poster une réponse
Anonyme