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 :

Rien pig� � ce snippet


Sujet :

Python

  1. #1
    Membre actif
    Homme Profil pro
    Ch�meur professionnel
    Inscrit en
    Novembre 2020
    Messages
    122
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 44
    Localisation : Alg�rie

    Informations professionnelles :
    Activit� : Ch�meur professionnel

    Informations forums :
    Inscription : Novembre 2020
    Messages : 122
    Par d�faut Rien pig� � ce snippet
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    def f(a,b):
        return b(a)
     
    def b(x):
        return x(0)
     
    print(f(lambda x: x + 1, b))
    C'est trop contre-intruitif pour que j'y pige qqch. J'esp�re que je n'aurai pas � tomber sur des aberrations pareilles dans des codes de vrai programme.
    M�me avec les explications de chatGPT j'y pige rien.

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 069
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 069
    Par d�faut
    f prend 2 fonctions en argument, a et b, et retourne le r�sultat de b(a)
    b prend une fonction en argument ,x , et retourne le r�sultat de x(0) ce qui laisse suppos� que x est une fonction qui prend au moins 1 argument, 0 ici.
    donc la fonction argument de a de f prend au moins 1 argument. D'ailleurs c'est lambda x: x + 1.

    ouais c'est tordu.

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    F�vrier 2006
    Messages
    12 848
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 12 848
    Billets dans le blog
    1
    Par d�faut
    Bonjour
    Citation Envoy� par Yuseph Voir le message
    C'est trop contre-intruitif pour que j'y pige qqch.
    Je suis d'accord. C'est pas �vident. C'est � mon avis un exemple permettant d'illustrer le fait qu'une fonction est elle-aussi un objet manipulable, donc qu'on peut passer � une autre fonction pour qu'elle s'en serve � son profit.
    Un exemple plus simple pourrait �tre le suivant
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def carre(c):
    	return c*4
     
    def cercle(r):
    	return r * 3.14 * 2
     
    def perimetre(f, v):
    	print(f, type(f))
    	return f(v)
     
    print("carré(5)=%f" % perimetre(carre, 5))
    print("cercle(6)=%f" % perimetre(cercle, 6))
    Je ne dis pas que c'est utile, mais �a illustre le fait qu'on peut traiter des fonctions comme des objets (d'ailleurs ce sont des objets). Et le print() dans la fonction "perimetre()" te le montre bien.

    Citation Envoy� par Yuseph Voir le message
    J'esp�re que je n'aurai pas � tomber sur des aberrations pareilles dans des codes de vrai programme.
    Des trucs aussi tordus non. Mais tu pourras tomber sur des trucs style sort(tableau, key=lambda ...) permettant de faire traiter chaque �l�ment du tableau par la fonction "lambda" afin que sort() sache comment comparer deux �l�ments.
    Et c'est aussi un point de d�part permettant de comprendre les d�corateurs...

    Citation Envoy� par Yuseph Voir le message
    M�me avec les explications de chatGPT j'y pige rien.
    H� oui. chatGPT ne remplace pas des humains capables d'analyser un texte, mettre en corr�lation leurs souvenirs et leurs connaissances grammaticales pour arriver ensuite � expliquer la solution. The Imitation Game n'est pas encode gagn�.
    Mon Tutoriel sur la programmation �Python�
    Mon Tutoriel sur la programmation �Shell�
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les diff�rentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Membre actif
    Homme Profil pro
    Ch�meur professionnel
    Inscrit en
    Novembre 2020
    Messages
    122
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 44
    Localisation : Alg�rie

    Informations professionnelles :
    Activit� : Ch�meur professionnel

    Informations forums :
    Inscription : Novembre 2020
    Messages : 122
    Par d�faut
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
    def f(a,b):
        return b(a)
     
    def b(x):
        return x(0)
     
    print(f(lambda x: x + 1, b))
    Ok alors je reprends �tape par �tape.

    1. print() veut afficher la fonction f(lambda x: x + 1, b)
    2. Python execute f(lambda x: x + 1, b), car f(a,b) est d�j� d�fini.
    3. f(a,b) doit retourner b(a), du coup c'est b(lambda x: x + 1) qui est retourn�. ce qui au passage cr�e un �trange lambda sans 2e argument.
    4. Comme b(lambda x: x + 1) est retourn�, Python execute alors la fonction b(x), c'est � dire toujours b(lambda x: x + 1)
    5. b(x) retourne la fonction x(0), c'est � dire lambda x: x + 1, 0 (� moins que ce soit (lambda x: x +1)(0), pas encore bien pig� la diff�rence)
    6. Cette fois lambda a de quoi manger, du coup le "0" qui sert de 2e argument devient b de lambda. lambda traite x + 1 comme 0 + 1.
    7. print() imprime 1.

  5. #5
    Expert �minent
    Homme Profil pro
    Architecte technique retrait�
    Inscrit en
    Juin 2008
    Messages
    21 771
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activit� : Architecte technique retrait�
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 771
    Par d�faut
    Citation Envoy� par Yuseph Voir le message
    Ok alors je reprends �tape par �tape.
    Vous trainez le lambda comme un boulet.
    Remplacez le par une vraie fonction:
    ce qui revient � print(f(g, b))
    Et comme on a que des "return", �a �quivaut a des remplacements: f(g, b) devient b(g) qui devient g(0) qui devient 1.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Expert confirm� Avatar de papajoker
    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 324
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ni�vre (Bourgogne)

    Informations professionnelles :
    Activit� : D�veloppeur Web
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 324
    Par d�faut
    bonjour,

    En effet, lambda n'apporte rien de particulier ici.
    Si tu ne comprends pas le cheminement, alors pourquoi tu n'inclus pas des print() ??? c'est la premi�re chose

    - print()
    - commentaires
    - renommer les fonctions (si plus compr�hensible ?)

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    def total(fonction_a, fonction_b):
        print("  # total...")
        # return appel_fontion(increment)
        return fonction_b(fonction_a)
     
    def appel_fonction(fonction_x):
        """ lire dans une BD/variable est plus logique comme mécanisme"""
        print("  # appel_fonction... set 100 et lui applique une fonction")
        # return increment(100)
        return fonction_x(100)
     
    def increment(x):
        print("  # increment...")
        return x + 1
     
    print(total(increment, appel_fonction))
    - lambda : n'est qu'une fonction
    - si on passe une fonction en param�tre, elle n'est pas ex�cut�e lors du passage, mais dans le corps de la fonction f().

    Note: ton code n'a rien d'un snippet

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    F�vrier 2006
    Messages
    12 848
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 12 848
    Billets dans le blog
    1
    Par d�faut
    Citation Envoy� par Yuseph Voir le message
    1. print() veut afficher la fonction f(lambda x: x + 1, b)
    Plus pr�cis�ment �a veut afficher ce que retourne "f". Si j'�cris def f(): return 123 et que j'appelle print(f()) �a affiche 123.

    Citation Envoy� par Yuseph Voir le message
    ce qui au passage cr�e un �trange lambda sans 2e argument.
    Pourquoi "�trange"? Une lambda peut avoir 0, 1 ou 500 arguments sans que ce soit �trange.
    J'en d�duis que dans l'�criture f(lambda x: x + 1, b) tu assimiles "b" comme 2� argument de la lambda. Ce qui n'est absolument pas le cas. La lambda re�oit un argument "x", retourne "x+1". Et c'est "f" qui re�oit deux arguments 1) la lambda 2) "b".

    Citation Envoy� par Yuseph Voir le message
    5. b(x) retourne la fonction x(0), c'est � dire lambda x: x + 1, 0 (� moins que ce soit (lambda x: x +1)(0), pas encore bien pig� la diff�rence)
    "f" d�signe l'objet fonction, un peu l'�tiquette de son code. Evidemment ce serait plus parlant si cette fonction avait un nom un peu plus d�velopp�. f() avec parenth�ses d�signe l'appel de la fonction, c'est � dire lui demander d'effectuer le travail pour laquelle elle a �t� cod�e et retourner le r�sultat calcul�.
    Mon Tutoriel sur la programmation �Python�
    Mon Tutoriel sur la programmation �Shell�
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les diff�rentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    721
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 721
    Par d�faut
    Citation Envoy� par Yuseph Voir le message
    [J'esp�re que je n'aurai pas � tomber sur des aberrations pareilles dans des codes de vrai programme.
    J'en d�duis que vous n'�tes pas encore programmeur de m�tier. Le jour o� vous rentrerez sur le march� de l'emploi et que vous aurez � reprendre des d�veloppement faits par d'autres, vous verrez des choses bien plus tordues
    Et encore, � l'avenir on va devoir se taper la reprise de code g�n�r�e par GPT... la joie Je sens qu'il y a encore de l'avenir pour l'humain en programmation

  9. #9
    Expert confirm� Avatar de papajoker
    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 324
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ni�vre (Bourgogne)

    Informations professionnelles :
    Activit� : D�veloppeur Web
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 324
    Par d�faut
    Ici, la particularit� est d'int�grer la constante 0 dans la fonction b()
    Je suis un CodeurGPT addict et je vais cr�er un code super pro ! pourquoi ? parce que c'est le but de ce m�canisme : changer les fonctions plut�t que des param�tres.
    Note :
    code bien s�r tr�s utile (dans ma t�te), mais puisque "�a marche", ce n'est pas le principal ?
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    def get_clean_champ(dico: dict, get_data, propre, convertir) -> str:
        return get_data(dico, propre, convertir)
     
     
    def get_champ(dico, nom_champ, autre, convertir) -> str:
        valeur = dico[nom_champ]
        return autre(convertir(str(valeur)))
     
    def get_nom(dico, convertir, autre) -> str:
        return get_champ(dico, "nom", autre, convertir)
     
    def get_prenom(dico, convertir, autre) -> str:
        return get_champ(dico, "prenom", autre, convertir)
     
     
    dico = {"nom": " LeFrank", "prenom": " alice"}
     
    print(get_clean_champ(dico, get_nom, str.strip, str.upper))
    print(get_clean_champ(dico, get_prenom, str.upper, str.strip))
    print(get_clean_champ(dico, get_prenom, str.lower, str.strip))
    print(get_clean_champ(dico, get_nom, str.strip, str.split))
    Un exemple plus r�aliste, serait :

    get_entree( read_from_clavier, str.lower )
    get_entree( read_from_clavier, convertir_en_breton )
    get_entree( read_from_fichier, convertir_en_python )

    def get_entree( read_from, convertir ):
    return {"entree": convertir(read_from)}

  10. #10
    Expert confirm� Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activit� : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par d�faut
    Citation Envoy� par Sve@r Voir le message
    ... �a illustre le fait qu'on peut traiter des fonctions comme des objets (d'ailleurs ce sont des objets)...
    Et encore aujourd'hui en 2023. Quelle �poque.

  11. #11
    Membre actif
    Homme Profil pro
    Ch�meur professionnel
    Inscrit en
    Novembre 2020
    Messages
    122
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 44
    Localisation : Alg�rie

    Informations professionnelles :
    Activit� : Ch�meur professionnel

    Informations forums :
    Inscription : Novembre 2020
    Messages : 122
    Par d�faut
    Ok merci des tuyaux. j'ai bien tenu compte de toutes vos remarques.
    Pour info, le code vient de chatGPT. Je lui avais demand� un exemple embl�matique. Car de toutes les questions de l'exam PCAP, les lambdas chelous �taient mon seul point faible.

  12. #12
    Membre actif
    Homme Profil pro
    Ch�meur professionnel
    Inscrit en
    Novembre 2020
    Messages
    122
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 44
    Localisation : Alg�rie

    Informations professionnelles :
    Activit� : Ch�meur professionnel

    Informations forums :
    Inscription : Novembre 2020
    Messages : 122
    Par d�faut
    Citation Envoy� par binarygirl Voir le message
    J'en d�duis que vous n'�tes pas encore programmeur de m�tier. Le jour o� vous rentrerez sur le march� de l'emploi et que vous aurez � reprendre des d�veloppement faits par d'autres, vous verrez des choses bien plus tordues
    Et encore, � l'avenir on va devoir se taper la reprise de code g�n�r�e par GPT... la joie Je sens qu'il y a encore de l'avenir pour l'humain en programmation
    Non, c'est pour la robotique et l'IoT.
    D�veloppeur, c'est un boulot qui donne des acouph�nes et des sympt�mes d'anxi�t�.

Discussions similaires

  1. [ jointure externe ] j'y pompe rien
    Par jaimepasteevy dans le forum Langage SQL
    R�ponses: 3
    Dernier message: 16/12/2003, 17h57
  2. R�ponses: 8
    Dernier message: 04/09/2003, 16h07
  3. Ne rien afficher
    Par rockbiker dans le forum DirectX
    R�ponses: 3
    Dernier message: 20/05/2003, 18h02
  4. [debutante] [JDBComboBox]rien � l'affichage
    Par Lina dans le forum JBuilder
    R�ponses: 3
    Dernier message: 22/11/2002, 13h31

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