LAMBDA functions sous Python 3
Fermé
getudir78
Messages postés
28
Date d'inscription
vendredi 3 janvier 2014
Statut
Membre
Dernière intervention
2 septembre 2020
-
Modifié le 6 déc. 2019 à 23:08
getudir78 Messages postés 28 Date d'inscription vendredi 3 janvier 2014 Statut Membre Dernière intervention 2 septembre 2020 - 8 déc. 2019 à 23:06
getudir78 Messages postés 28 Date d'inscription vendredi 3 janvier 2014 Statut Membre Dernière intervention 2 septembre 2020 - 8 déc. 2019 à 23:06
A voir également:
- LAMBDA functions sous Python 3
- Picasa 3 - Télécharger - Albums photo
- Citizen code python avis - Accueil - Outils
- Photorecit 3 - Télécharger - Visionnage & Diaporama
- Ai suite 3 download - Télécharger - Optimisation
2 réponses
yg_be
Messages postés
23408
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
26 décembre 2024
Ambassadeur
1 557
7 déc. 2019 à 00:02
7 déc. 2019 à 00:02
bonjour,
1) tu n'utilises pas la syntaxe correcte pour déclarer une fonction lambda.
une recherche avec "python fonction lambda" te donnera immédiatement des exemples de la syntaxe a utiliser.
2) tu ne peux pas transformer n'importe quelle fonction en fonction lambda. la fonction doit n'être qu’une seule expression. si tu penses que c'est possible, commence par créer et tester une fonction classique n'étant qu'une seule expression, et qui donne le même résultat que ta fonction de départ.
1) tu n'utilises pas la syntaxe correcte pour déclarer une fonction lambda.
une recherche avec "python fonction lambda" te donnera immédiatement des exemples de la syntaxe a utiliser.
2) tu ne peux pas transformer n'importe quelle fonction en fonction lambda. la fonction doit n'être qu’une seule expression. si tu penses que c'est possible, commence par créer et tester une fonction classique n'étant qu'une seule expression, et qui donne le même résultat que ta fonction de départ.
Bonjour,
Ta fonction construit_anonyme est une closure..
De un tu ne l'appelles pas dans ton code, de deux extend retourne None, de trois, pas besoin de mettre un paramètre à lambda.
Puis l'appel.
De l'intérêt à faire ça dans ton code, une question à se poser.
Ta fonction construit_anonyme est une closure..
De un tu ne l'appelles pas dans ton code, de deux extend retourne None, de trois, pas besoin de mettre un paramètre à lambda.
def construit_anonyme(t) : """ liste ordonnée des chiffres successifst[1] répétés t[0] fois """ return lambda: [x for l in t for x in ((l[1],) * l[0])]
Puis l'appel.
liste_decomp_2 = construit_anonyme(liste_1)()
De l'intérêt à faire ça dans ton code, une question à se poser.
yg_be
Messages postés
23408
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
26 décembre 2024
1 557
7 déc. 2019 à 12:03
7 déc. 2019 à 12:03
pourquoi alors ne pas faire:
construit_anonyme = lambda t : [x for l in t for x in ((l[1],) * l[0])]
getudir78
Messages postés
28
Date d'inscription
vendredi 3 janvier 2014
Statut
Membre
Dernière intervention
2 septembre 2020
33
>
yg_be
Messages postés
23408
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
26 décembre 2024
8 déc. 2019 à 23:06
8 déc. 2019 à 23:06
Merci pour ta suggestion. Je l'ai mise en œuvre ; elle fonctionne parfaitement.
Mon but sur ce cas d'école était de mettre en parallèle une fonction définie classiquement et une lambda function. J'ai donc essayé de garder le maximum de similitude; d'où la définition avec un def. Dans le cas où je l'utiliserais plusieurs fois, ça m'éviterait de dupliquer du code.
Mon but sur ce cas d'école était de mettre en parallèle une fonction définie classiquement et une lambda function. J'ai donc essayé de garder le maximum de similitude; d'où la définition avec un def. Dans le cas où je l'utiliserais plusieurs fois, ça m'éviterait de dupliquer du code.
getudir78
Messages postés
28
Date d'inscription
vendredi 3 janvier 2014
Statut
Membre
Dernière intervention
2 septembre 2020
33
7 déc. 2019 à 17:55
7 déc. 2019 à 17:55
Bonsoir,
Merci pour ton aide.
Au niveau de mon cours d'initiation, je ne sais pas ce qu'est une closure mais ça n'est pas grave. J'ai bien compris que définir une fonction qu'on n'appelle pas, ça ne sert à rien.
Si j'ai bien interprété construit_anonyme(liste_1)() , les () servent à exécuter la fonction lambda du return.
J'ai utilisé ton code et j'ai vérifié qu'on obtient les bons résultats.
J'en ai aussi adapté une version avec un return sans lambda qui donne les mêmes résultats et qui ne nécessite pas les () lors de l'appel.
Encore merci pour ton aide qui m'a apporté des éléments de réflexion que je n'avais pas trouvé sur internet
Merci pour ton aide.
Au niveau de mon cours d'initiation, je ne sais pas ce qu'est une closure mais ça n'est pas grave. J'ai bien compris que définir une fonction qu'on n'appelle pas, ça ne sert à rien.
Si j'ai bien interprété construit_anonyme(liste_1)() , les () servent à exécuter la fonction lambda du return.
J'ai utilisé ton code et j'ai vérifié qu'on obtient les bons résultats.
J'en ai aussi adapté une version avec un return sans lambda qui donne les mêmes résultats et qui ne nécessite pas les () lors de l'appel.
Encore merci pour ton aide qui m'a apporté des éléments de réflexion que je n'avais pas trouvé sur internet