IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Nouvelles versions de Python


Sujet :

Python

  1. #21
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    On parle de compréhension de liste, mais on peut faire des tuples, pas de dictionnaire (il me semble).

  2. #22
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 47
    Points : 43
    Points
    43
    Par défaut
    OK merci

  3. #23
    Membre éclairé Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Points : 844
    Points
    844
    Par défaut
    Citation Envoyé par med365 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    nums = [1, 2, 3, 4]
    nums2 = map(nums, lambda x: x*2)
    Ou plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    nums = map(lambda x: x*2, range(1,5))
    Citation Envoyé par med365 Voir le message
    à côté de ça on trouve la compréhension de liste qui est une fonctionnallité ultra puissante de python et qui permet d'arriver au même
    Et que penses-tu du code suivant ? Si ça c'est pas ultra puissant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    from functools import *
    def list_mod(n):
      return partial(filter, lambda x: x % n == 0)
     
    f = list_mod(2)
    print f(range(100))
     
    f = list_mod(3)
    print f(range(100))
    Citation Envoyé par Matthieu Brucher
    ...mais les listes sont plus faciles à lire et à utiliser que les fonctions...
    Amusez-vous à faire aussi court, simple et lisible sans utiliser de programmation fonctionnelle (filter & partial) !

    Citation Envoyé par med365 Voir le message
    A ce propos, j'ai une petite question, lorsqu'on utilise l'écriture j for i in liste il faut toujours utiliser une liste en "retour" (comme nums2 ici) ou on peut utiliser aussi un dico ou un tuple (même si j'en doute vu que ce n'est pas une fonction renvoyant un tuple en retour mais une boucle...) ?
    Ben zut alors, avec les listes on peut pas ! C'est bête !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    from pprint import *
     
    l = range(32, 127)
    d = dict(zip(map(chr, l), map(lambda i: "0x%02x" % i, l)))
    pprint(d)
    Et un joli dico des caractères ASCII ! Un !
    Avant de poster un message .
    Quand vous avez la réponse à votre question, n'oubliez pas de cliquer sur .

  4. #24
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Ton exemple doit passer par zip pour fonctionner. Avec les compréhensions de list, on fait la même chose sans le zip.
    La question était de savoir si on peut passer directement par un dictionnaire, la réponse est "non" avec les deux solutions.

    Quant à ton premier problème, il utilise des fonctions supplémentaires, je peux très bien faire de même (et encore, sans fonction supplémentaire...)

    Essaie juste de ne pas être autant acide dans tes réponses.

  5. #25
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Citation Envoyé par mchk0123 Voir le message
    Amusez-vous à faire aussi court, simple et lisible sans utiliser de programmation fonctionnelle (filter & partial) !
    Sans partial et sans filter:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def list_mod(n):
        return lambda x: [e for e in x if e % n == 0]
     
    f = list_mod(2)
    print f(range(100))
     
    f = list_mod(3)
    print f(range(100))
    Citation Envoyé par mchk0123 Voir le message
    Ben zut alors, avec les listes on peut pas ! C'est bête !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    from pprint import *
     
    l = range(32, 127)
    d = dict(zip(map(chr, l), map(lambda i: "0x%02x" % i, l)))
    pprint(d)

    Et un joli dico des caractères ASCII ! Un !
    Comment ça avec les listes, on peut pas?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    from pprint import pprint
     
    liste = range(32, 127)
    d = dict( [(chr(n), "0x%02x" % n) for n in liste] )
    pprint(d)
    et je trouve cette version plus lisible!

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  6. #26
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    J'allais sortir le premier exemple, j'y avais pensé en allant au boulot
    Plusieurs intérêts à cette méthode :
    - plus court
    - pas d'importation sauvage

    et auun inconvénient supplémentaire

  7. #27
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Points : 1 257
    Points
    1 257
    Par défaut
    Perso je suis plus dev .net que python et j ai eu l'agreable surprise de voir que le nouveau C# 3 s'etait pas mal inspiré de python et a ajouter des fonction "lambda", quel agréable surprise ...
    et la maintenant je vois que dans python 3 il vont retirer lambda ...

    Je ne comprend pas vraiment c pourtant hyper pratique et élégant ...

  8. #28
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Ca ne sera pas enlevé, il me semble. En revanche, ce n'est pas non plus super super utile, ça dépend des cas.

  9. #29
    Membre éclairé Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Points : 844
    Points
    844
    Par défaut
    Citation Envoyé par Thierry Chappuis
    ...
    Tu as un peu triché, tu as utilisé "lambda" et "dict()".
    Ce ne sont donc pas une solution purement à base de comprehension list.

    Bon d'accord, je cherche la petite bête.
    Avant de poster un message .
    Quand vous avez la réponse à votre question, n'oubliez pas de cliquer sur .

  10. #30
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Citation Envoyé par mchk0123 Voir le message
    Tu as un peu triché, tu as utilisé "lambda" et "dict()".
    Ce ne sont donc pas une solution purement à base de comprehension list.

    Bon d'accord, je cherche la petite bête.
    Oui, tu peux sortir, ta version utilise dict et zip
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    d = dict(zip(map(chr, l), map(lambda i: "0x%02x" % i, l)))

  11. #31
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Citation Envoyé par mchk0123 Voir le message
    Tu as un peu triché, tu as utilisé "lambda" et "dict()".
    Ce ne sont donc pas une solution purement à base de comprehension list.

    Bon d'accord, je cherche la petite bête.
    Où ais-je triché? Tu avais avancé qu'il n'était pas possible d'écrire un code aussi concis que le tiens sans utiliser partial() ni filter(). Je n'ai utilisé aucune de ces deux fonctions.

    En ce qui concerne dict(), je ne vois pas comment tu veux construire un dictionnaire à partir de listes en te passant de cette fonction. Mais bon, l'utilisation de cette fonction n'a rien à voir avec le débat map/filter vs compréhensions de listes.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  12. #32
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut
    Ok ok, tout ça est super intéressant.

    Bon j'ai encore pas mal de boulot je pense avant d'arriver à tout piger, à tout utiliser et à avoir votre niveau, mais c'est pas grave.

    Merci pour tous ces renseignements.
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

  13. #33
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Citation Envoyé par Charles-Elie Voir le message
    Ok ok, tout ça est super intéressant.

    Bon j'ai encore pas mal de boulot je pense avant d'arriver à tout piger, à tout utiliser et à avoir votre niveau, mais c'est pas grave.

    Merci pour tous ces renseignements.
    Il n'y a rien de difficile dans tout cela. Cela viendra vite, tu verras!

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  14. #34
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Points : 1 257
    Points
    1 257
    Par défaut
    Citation Envoyé par Matthieu Brucher Voir le message
    Ca ne sera pas enlevé, il me semble. En revanche, ce n'est pas non plus super super utile, ça dépend des cas.
    Je viens de faire des recherche ... en fait ça fait des années que guido voulait enlever lambda mais pour ne pas casser la compatibilité il ne l'a pas fait sur la branche 2.x mais il disait qu'il allait le faire sur la 3.x

    Finalement il y a un peu moins d un an il a dit qu'il le garderait car il n'a pas trouver d'alternative au moins aussi efficace bien qu'il n'aime pas trop le systeme.

    bon bin c cool

  15. #35
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Pour en savoir plus sur ce débat: http://www.artima.com/weblogs/viewpost.jsp?thread=98196. lambda, filter et map feront finalement bien partie de Python 3.0. Seule la fonction reduce() sera écartée.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  16. #36
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut
    Je ne connaissais pas la fonction lambda. Je viens de lire un sujet posté par GuiGui sur la FAQ et je commence à comprendre l'utilité de celle-ci, notamment la possibilité de modifier facilement la valeur d'un Label par divers Button (l'exemple quoi...).

    Par contre y a-t-il une utilisation de lambda qui pourrai permettre d'associer plusieurs fonctions à un seul Button.
    Aujourd'hui, la seule façon que j'ai trouvé c'est d'appeler une fonction qui appelle toute les autres.
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

  17. #37
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Le pricnipa de l'instruction lambda, c'est de créer une fonction rapidement qui ne fait qu'une seule chose.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    f = lambda x: [e for e in x if e % n == 0]
    C'est la même chose que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def f(x):
      return [e for e in x if e % n == 0]
    Rien de plus.

  18. #38
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Citation Envoyé par Matthieu Brucher Voir le message
    Le pricnipa de l'instruction lambda, c'est de créer une fonction rapidement qui ne fait qu'une seule chose.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    f = lambda x: [e for e in x if e % n == 0]
    C'est la même chose que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def f(x):
      return [e for e in x if e % n == 0]
    Rien de plus.
    Techniquement, une forme lambda n'est pas une instruction, mais elle est syntaxiquement équivalente à une expression. Ainsi, lambda peut être utilisé là où il n'est pas possible d'utiliser def, comme par exemple en argument d'une fonction.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  19. #39
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Points : 1 257
    Points
    1 257
    Par défaut
    Citation Envoyé par Thierry Chappuis Voir le message
    Techniquement, une forme lambda n'est pas une instruction, mais elle est syntaxiquement équivalente à une expression. Ainsi, lambda peut être utilisé là où il n'est pas possible d'utiliser def, comme par exemple en argument d'une fonction.

    Thierry
    c'est la toute la différence et la puissance de la chose

  20. #40
    Membre éclairé Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Points : 844
    Points
    844
    Par défaut
    Arf :

    Citation Envoyé par Anonyme
    Que deviendrais la vie sans lambda() ?
    ...
    Depuis que je connais lambda(), je programme mieux et plus vite.
    ...
    Si lambda() n'existait pas il faudrait l'inventer.
    ...
    NB : je vais changer de profession, je vais me lancer dans la pub.
    Avant de poster un message .
    Quand vous avez la réponse à votre question, n'oubliez pas de cliquer sur .

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. [Python 3.X] [Annonce] Une introduction à Python 3 - nouvelle version
    Par lpointal dans le forum Contribuez
    Réponses: 0
    Dernier message: 18/01/2015, 12h58
  2. Réponses: 6
    Dernier message: 21/01/2011, 17h38
  3. Réponses: 1
    Dernier message: 06/04/2004, 11h01
  4. Nouvelle version de MySql
    Par syannic dans le forum SQL Procédural
    Réponses: 8
    Dernier message: 17/03/2003, 17h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo