|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Membre confirmé
![]() Etudiant informatique autodidacte Inscription : juin 2010 Messages : 452 ![]() |
Salut les pythons,
Je suis un python connaissant les bases du langage et ayant développer plusieurs applications qui fonctionnent (2000 lignes >) et j'ai donc développer un style et j'ai une petite expérience du python. Mais je n'arrive pas combler 2 lacunes dans mes bases du langage: -je n'arrive pas a mémoriser les syntaxes de car je ne les comprend pas: --1) des fonction lambda. --2) des listes d'expressions A chaque fois que je dois utiliser ces notions je suis obliger de me plonger dans la doc après plusieurs échec des tests dans l'interpréteur. Je sais qu'une fonction lambda est une fonction définis directement pour etre utiliser directement. Je sais qu'une liste d'expression renvoie une liste en fonction de sa syntaxe. Si il existe un Python a l'esprit didactique qui peut m'aider sa serai sympa, peut-etre sous forme de mémos écrit en pseudo-code. Merci pour vos réponses et pour vos contribution a ma culture cybernétique. Bon python a vous.
__________________
Pour faire tes armes: Use du présent pour construire ton futur sinon use de ce que tu as appris auparavant. Et sois toujours bien armé avant de te lancer. Le hasard ne sourit qu'aux gens préparés... Blog: http://3dcyberspace.unblog.fr/ Site: Sanctuaire cybernétique |
|
00
|
|
|
#2 |
|
Membre habitué
![]() Inscription : avril 2007 Messages : 89 ![]() |
Pour les fonctions lambda:
est équivalent à Plus généralement ce qui est entre lambda et ":" définit les arguments de la lambda fonction et ce qui est après définit l'expression retournée par la lambda fonction: équivalent à Après si tu as du mal avec les lambda fonctions, tu peux utiliser des fonctions tout simplement. Pour les listes d'expressions: Je ne sais pas de quoi tu parles, ce qui suit c'est ce que tu appelles une liste d'expression ? Code :
[attr for attr in dir(obj) if attr[0] != '_'] |
|
|
00
|
|
|
#3 |
|
Membre confirmé
![]() Etudiant informatique autodidacte Inscription : juin 2010 Messages : 452 ![]() |
Merci pour la syntaxe des fonction lambda,
j'appelle une liste d'expression une structure qui commence avec: en pseudo-code: par exemple(je sais pas si c'est juste comme syntaxe). J'ai ces lacunes car dans le livre qui m'a servi a apprendre les syntaxes de ces deux structure n'était que présent que sous forme d'exemple sans formulation syntaxique pure. Merci pour votre aide. PS: c'est aussi peut-etre du a l'interpréteur que j'utilise...?
__________________
Pour faire tes armes: Use du présent pour construire ton futur sinon use de ce que tu as appris auparavant. Et sois toujours bien armé avant de te lancer. Le hasard ne sourit qu'aux gens préparés... Blog: http://3dcyberspace.unblog.fr/ Site: Sanctuaire cybernétique |
|
00
|
|
|
#4 |
|
Membre du Club
![]() Inscription : juin 2011 Messages : 35 ![]() |
|
|
|
00
|
|
|
#5 |
|
Membre confirmé
![]() Etudiant informatique autodidacte Inscription : juin 2010 Messages : 452 ![]() |
Salut,
c'est de List Comprehension dont je parlais.
__________________
Pour faire tes armes: Use du présent pour construire ton futur sinon use de ce que tu as appris auparavant. Et sois toujours bien armé avant de te lancer. Le hasard ne sourit qu'aux gens préparés... Blog: http://3dcyberspace.unblog.fr/ Site: Sanctuaire cybernétique |
|
00
|
|
|
#6 | ||
|
Membre du Club
![]() Inscription : juin 2011 Messages : 35 ![]() |
Un exemple vaut souvent mieux qu'un long discourt :
Code :
Code :
ls = [ attr for attr in dir(obj) if attr != '_' ] |
||
|
|
00
|
|
|
#7 | ||||
|
Membre chevronné
![]() Bastien MontagneDiverses et multiples Inscription : mai 2008 Messages : 492 ![]() |
En fait, les list comprehensions (ou dict…, ou tuple…, ou set…, maintenant, en py3) ne sont qu’un raccourcis de generator expressions…
est équivalent à… Et on peut donc les utiliser également pour générer un dict, par exemple: Code :
{k: v for k, v in (('a', 1), ('b', 2), ('c', 3))} Code :
expression(el1[, el2, …]) for el1[, el2, …] in iterable [if condition1 [if condition2 …]] for el1[, el2, …] in iterable est exactement la même chose qu’une boucle for classique*! [if condition1 [if condition2 …]] sont un ou plusieurs tests – si l’un d’entre eux renvoie False, le ou les éléments en cours sont ignorés, et on passe direct aux suivants. En forme développée, cela donne, pour une liste comprehension*: Code :
Code :
function(expression(el1[, el2, …]) for el1[, el2, …] in iterable [if condition1 [if condition2 …]]) Code :
__________________
Incantation : Méchant forum, arrête de transformer toutes mes espaces insécables en astérisques |
||||
|
|
10
|
|
|
#8 |
![]() ![]() Inscription : juin 2008 Messages : 2 677 ![]() |
Salut,
Pensez aussi à lire les PEPs:
- W
__________________
Architectures Post-Modernes |
|
|
00
|
|
|
#9 | ||
|
Candidat au titre de Membre du Club
![]() Serge Inscription : février 2012 Messages : 12 ![]() |
Bonjour.
Alors, j'apporte une petite précision sur les lambdas. Au départ, j'ai eu du mal à saisir le concept. M'en servir, oui, mais leur utilité, je ne comprenais pas. Jusqu'au jour où j'ai commencé à comprendre la POO de python, et que tout est objet, y compris les fonctions. Un exemple : Code :
Bon, après, on utilise (relativement) rarement les lambdas. Mais c'est toujours mieux de comprendre à quoi ça sert. Edit : j'ai l'impression en me relisant de parler du seigneur des anneaux... |
||
|
|
00
|
|
|
#10 | ||||||
|
Membre Expert
![]() ![]() Inscription : décembre 2007 Messages : 1 435 ![]() |
Bonjour,
Petit complément pour la "list comprehension" (quel nom bizarre...): on peut utiliser plusieurs boucles 'for' à la suite, qui fonctionneront comme des boucles imbriquées: Code :
Code :
Code :
__________________
Tant que les ordinateurs ne trouvent pas eux-mêmes les prises de courant, nous avons des chances de maitriser la situation Mes recettes python et linux: http://www.jpvweb.com |
||||||
|
|
00
|
|
|
#11 |
|
Membre confirmé
![]() Etudiant informatique autodidacte Inscription : juin 2010 Messages : 452 ![]() |
Merci pour vos explications et exemples dont certains me dépasse, pour les fonction lambda j'ai saisie la syntaxe de base:
Mais pour les listes de compréhension un truc me dérange dans l'insertion de la syntaxe dans les circuits de ma mémoire: C'est une boucle coupler avec une structure conditionnelle qui renvoie une liste mais dans cette boucle pourquoi ajouter une variable devant la boucle...? Faut-il quelle soit la meme que celle dans la boucle ? Est-ce la valeur retourner en fonction de la condition ? PS: j'ai déja utilser une liste de compréhension dans un de mes programmmes pour extraire un fichier image, conditionnellement, d'un os.listdir() afin d'avoir le résultat dans une liste directement pour pouvoir directement l'utilser avec avec PIL et Tkinter (la référence a l'objet image doit etre contenus dans un conteneur pour sa pérénité dans l'espace de nom). Merci pour vos réponses.
__________________
Pour faire tes armes: Use du présent pour construire ton futur sinon use de ce que tu as appris auparavant. Et sois toujours bien armé avant de te lancer. Le hasard ne sourit qu'aux gens préparés... Blog: http://3dcyberspace.unblog.fr/ Site: Sanctuaire cybernétique |
|
00
|
|
|
#12 | ||||||
|
Membre chevronné
![]() Bastien MontagneDiverses et multiples Inscription : mai 2008 Messages : 492 ![]() |
On n’“ajoute” pas une variable devant la boucle, on indique à python que faire de ce que la boucle génère. Le cas le plus simple est de l’utiliser tel quel*:
Code :
Code :
Code :
À propos des lambda*: 1) N’oublie pas les virgules séparant les paramètres*! 2) Ne pas utiliser return*! Il est implicite, dans une lambda*:
__________________
Incantation : Méchant forum, arrête de transformer toutes mes espaces insécables en astérisques |
||||||
|
|
00
|
|
|
#13 | |||
|
Membre confirmé
![]() Etudiant informatique autodidacte Inscription : juin 2010 Messages : 452 ![]() |
Merci cette fois le flux nerveux de la syntaxe des liste d'expression circule dans les méandres de ma mémoire j'ai fait un test qui comme toi a confirmer la supposition que j'ai faite et le test aussi:
Citation:
Code :
__________________
Pour faire tes armes: Use du présent pour construire ton futur sinon use de ce que tu as appris auparavant. Et sois toujours bien armé avant de te lancer. Le hasard ne sourit qu'aux gens préparés... Blog: http://3dcyberspace.unblog.fr/ Site: Sanctuaire cybernétique |
|||
|
00
|
|
|
#14 |
|
Membre émérite
![]() Inscription : juillet 2006 Messages : 975 ![]() |
Je ferais plutôt cela
__________________
Linux ubuntu 8.04 Aspire 5611ZWLMi Intel Core Duo 1,6 GHz |
|
|
00
|
|
|
#15 |
|
Membre confirmé
![]() Etudiant informatique autodidacte Inscription : juin 2010 Messages : 452 ![]() |
Je ne savais pas qu'on pouvait donner les éléments des éléments afin itérer dessus a la boucle...?
Je pensais que for devrait itérer sur les tuples mais pas leurs contenus, est-ce-que la boucle analyse le (ici les) paramètre(s) qui lui sont passer...??? Peut tu expliquer la mécanique. Car normalement en itérant sur la variable a, v devrai prendre la valeur du tuple...??? et comme tu lui donne 2 paramètres je ne vois pas comment, celle-çi qui est censé parcourir la variable a, peut accéder a son sous-contenus automatiquement. J'aurai fait une double itération pour itérer sur le contenu du tuple ou donner l'indice comme je l'ai fait. Je me coucherai vraiment moins bete ce soir.
__________________
Pour faire tes armes: Use du présent pour construire ton futur sinon use de ce que tu as appris auparavant. Et sois toujours bien armé avant de te lancer. Le hasard ne sourit qu'aux gens préparés... Blog: http://3dcyberspace.unblog.fr/ Site: Sanctuaire cybernétique |
|
00
|
|
|
#16 | ||
|
Membre émérite
![]() Inscription : juillet 2006 Messages : 975 ![]() |
Tu as une liste de tuples donc à la base on peut faire
Code :
__________________
Linux ubuntu 8.04 Aspire 5611ZWLMi Intel Core Duo 1,6 GHz |
||
|
|
00
|
|
|
#17 | |||||
|
Expert Confirmé
![]() Patrice Technicien Help Desk, maintenance, réseau, système et + Inscription : juin 2006 Messages : 2 032 ![]() |
Bonsoir,
Petit quizz par rapport à ceci (désolé tyrtamos, c'est l'exemple le plus complet pour un cut/paste...): Citation:
Pour la performance ? Difficile de faire plus rapide que for/in (et in en général pour le code) pour une itération. A la limite une closure ? Bref, il existe des limites aux (object)compréhensions et autres lambda: La lecture du code (quand jeune padawan relira son code plus tard, les cheveux il s'arracheras et sa pythonnerie il regretteras). Votre avis ? @+
__________________
Merci d'utiliser le forum pour les questions techniques. |
|||||
|
|
00
|
|
|
#18 | |
|
Membre émérite
![]() Inscription : juillet 2006 Messages : 975 ![]() |
Citation:
Bref, à partir du moment où t'en as bouffé, lire ou écrire vient strictement au même, mais j'avoue très certainement que l'expérience à ce niveau paie.
__________________
Linux ubuntu 8.04 Aspire 5611ZWLMi Intel Core Duo 1,6 GHz |
|
|
|
00
|
|
|
#19 | ||||
|
Membre Expert
![]() Inscription : mars 2007 Messages : 772 ![]() |
Bonsoir,
Citation:
Je suppose que tu trouves le 3ème code moins lisible que les autres, mais il fait "un peu plus" que les autres; il crée une fonction paramétrée. Ce serait inutilement complexe de l'écrire ainsi si la fonction n'était appelée qu'une seule fois, mais sinon c'est utile. Bien sûr on peut aussi l'écrire: Code :
Citation:
Pour les lambda c'est moins le cas, mais elles ont leur place, par exemple pour préciser l'argument key avec la méthode sort ou pour certains callbacks avec tkinter par exemple. Et ces constructions ne sont pas nécessaires pour écrire un code illisible |
||||
|
|
00
|
|
|
#20 |
|
Membre chevronné
![]() Bastien MontagneDiverses et multiples Inscription : mai 2008 Messages : 492 ![]() |
Certes, utiliser ce genre de fonctionnalités “avancées” n’est pas indispensable, et “complique” la lecture pour quelqu’un de moins expérimenté/habitué…
Mais sans même parler de performances, rien que le fait d’utiliser quatre ou cinq lignes de moins, moi, quand je travaille sur de gros fichiers, ça me parle… Et à choisir, je préfère encore largement une list comprehension, même complexe, à (par exemple) ce truc de l’initialisation par défaut des paramètres optionnels de fonction (qui fait qu’on se retrouve avec le même objet à chaque appel de la fonction…) –*ça c’est un truc vraiment vicieux, à la (re)lecture d’un code… Et pourtant, ça peut être diablement pratique, parfois*!
__________________
Incantation : Méchant forum, arrête de transformer toutes mes espaces insécables en astérisques |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com