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 :

2 lacunes dans mes bases


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Par défaut 2 lacunes dans mes bases
    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.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 103
    Par défaut
    Pour les fonctions lambda:
    est équivalent à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def f(a,b):
        return a+b
    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 à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def f(...):
        return ***
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    [attr for attr in dir(obj) if attr[0] != '_']

  3. #3
    Membre éprouvé
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Par défaut
    Merci pour la syntaxe des fonction lambda,
    j'appelle une liste d'expression une structure qui commence avec:
    en pseudo-code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    v for v in liste if v opérateur *
    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...?

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 43
    Par défaut
    Bonjour,

    Voulez-vous parler de List Comprehension ou de Generator Expression ?

  5. #5
    Membre éprouvé
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Par défaut
    Salut,
    c'est de List Comprehension dont je parlais.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 43
    Par défaut
    Un exemple vaut souvent mieux qu'un long discourt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ls = list()
    for attr in dir(obj):
        if attr != '_':
            ls.append(attr)
    Et voici l'équivalant avec une list comprehension :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ls = [ attr  for attr in dir(obj)  if attr != '_' ]
    PS: Merci à ZZelle pour l'inspiration...

  7. #7
    Membre Expert

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Par défaut
    En fait, les list comprehensions (ou dict…, ou tuple…, ou set…, maintenant, en py3) ne sont qu’un raccourcis de generator expressions…
    est équivalent à…
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    list(a for a in range(10))
    Et on peut donc les utiliser également pour générer un dict, par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {k: v for k, v in (('a', 1), ('b', 2), ('c', 3))}
    Les exemples donnés ci-dessus n’ont évidemment pas grand intérêt, mais cette construction permet des conversions ou sélections d’iterables quelconques, relativement complexes, en une seule ligne. Leur expression abstraite est*:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    expression(el1[, el2, …]) for el1[, el2, …] in iterable [if condition1 [if condition2 …]]
    expression peut être toute expression python, appel d’une fonction, définition d’une liste/tuple/…, opérateurs comme l’addition/multiplication/etc.

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    lst = []
    for el1[, el2, …] in iterable:
        [if condition1:
            continue
        [if condition2:
            continue
        ]]
        lst.append(expression(el1[, el2, …]))
    De façon plus générale, une generator expression peut se “développer” comme cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function(expression(el1[, el2, …]) for el1[, el2, …] in iterable [if condition1 [if condition2 …]])
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def gen(iterable):
        for el1[, el2, …] in iterable:
            [if condition1:
                continue
            [if condition2:
                continue
            ]]
            yield expression(el1[, el2, …]))
    function(gen(iterable))
    Je ne sais pas si c’est suffisamment clair… De toute façon, il en est de ces expressions comme des regex et de beaucoup d’autre chose – la meilleure façon de les comprendre, c’est de les utiliser (en commençant par des cas simples, évidemment).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. j'arrive pas à insérit tous mes donnée dans ma base
    Par thecharmer dans le forum Général Java
    Réponses: 1
    Dernier message: 24/04/2008, 18h03
  2. mes _FK ne sont pas persistés dans ma base oracle
    Par mickael.guilbert dans le forum JPA
    Réponses: 4
    Dernier message: 08/02/2008, 11h01
  3. Problème de fichiers dans les dossiers de mes bases
    Par grinder59 dans le forum SQL Procédural
    Réponses: 0
    Dernier message: 20/07/2007, 20h14
  4. [mysql] récuperer mes infos dans ma base !
    Par dekovince dans le forum Requêtes
    Réponses: 10
    Dernier message: 17/04/2007, 14h06
  5. comment liè mes image dans ma base mysql
    Par hiagro dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 12/06/2006, 10h21

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