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 :

Probléme valeur d'une variable


Sujet :

Python

  1. #1
    Membre habitué
    Avatar de moithibault
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2009
    Messages : 124
    Points : 142
    Points
    142
    Par défaut Probléme valeur d'une variable
    Bonjour ,

    J'affiche un menu en cascade avec une liste de fichiers à inclure (Tkinter):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for file in os.listdir('./fichiers'):
                  menu.add_command(label=file,command=lambda:self.load(file))
    Donc ici je demande simplement d'ajouter le titre de tout les fichiers présents dans le dossier "fichiers" à un menu en cascade.

    Le problème c'est lorsque que je clique sur un fichier pour le charger ( grâce à ma méthode load) Il me charge toujours le dernier , je pense que la variable file dans "command=..." comme elle n'est appelé qu'a la fin du chargement elle a pour valeur sa dernière valeur transmise en locurrence le nom de mon dernier fichier et ça expliqueré mon probléme mais je me demande comment le résoudre , je pensais à crée a chaque lecture de la boucle une nouvelle variable qui contiendré la valeur de la variable actuel de la boucle de file.... C'est dur a expliquer à l'écrit j'espère que vous avez compris (je croit que c'est un cas fréquent) Pouvez-vous m'aider , merci!


    J'ai mis mon topic dans 'Général Python' , mon code contient une commande Tkinter mais mon problème ne concerne pas cette commande c'est plutôt un probléme de variable ....

  2. #2
    Membre éclairé
    Avatar de airod
    Homme Profil pro
    Gérant Associé, DMP Santé et Directeur technique
    Inscrit en
    Août 2004
    Messages
    767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Gérant Associé, DMP Santé et Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 767
    Points : 891
    Points
    891
    Par défaut
    normal, il faut stocker chacune des instances de menu sinon, a chaque itération celle ci remplace la précédente.

    essaie ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    listeMenu=[]
    for file in os.listdir('./fichiers'):
        listMenu.append(menu.add_command(label=file,command=lambda:self.load(file)))

  3. #3
    Membre habitué
    Avatar de moithibault
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2009
    Messages : 124
    Points : 142
    Points
    142
    Par défaut
    Arf ça marche toujours pas ..

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 048
    Points : 1 378
    Points
    1 378
    Par défaut
    utiliser 'file' comme nom de variable c'est mal ...

  5. #5
    Membre éclairé
    Avatar de airod
    Homme Profil pro
    Gérant Associé, DMP Santé et Directeur technique
    Inscrit en
    Août 2004
    Messages
    767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Gérant Associé, DMP Santé et Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 767
    Points : 891
    Points
    891
    Par défaut
    +1
    mais pas percuté

    alors essaie de ne pas passer "file" mais l'index de "file"

    ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    listFichier=os.listdir('./fichiers')
    a=0
    while a<len(listFichier):
        menu.add_command(label=listFichier[a],command=lambda:self.load(listFichier[a]))
        a+=1
    qui sait!

  6. #6
    Membre habitué
    Avatar de moithibault
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2009
    Messages : 124
    Points : 142
    Points
    142
    Par défaut
    Merci Ca marche avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while a<(len(listFichier)-1)
    et pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     while a<len(listFichier)
    sinon "index out of range"

    Ca marche mais comme avant : il me charge toujours le dernier ....

  7. #7
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 048
    Points : 1 378
    Points
    1 378
    Par défaut
    je ne connais pas cette lib mais ça à l'air d'un problème de référence ...
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    listFichier=os.listdir('./fichiers')
    a=0
    while a<len(listFichier)-1:
        menu.add_command(label=str(listFichier[a]),command=lambda:self.load(listFichier[a]))
        a+=1
    pour voir ...

  8. #8
    Membre habitué
    Avatar de moithibault
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2009
    Messages : 124
    Points : 142
    Points
    142
    Par défaut
    ...Toujours pareil

  9. #9
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 048
    Points : 1 378
    Points
    1 378
    Par défaut
    bon, j'ai jeté un oeil sur la doc.
    tu peux poster ton code complet ?
    du moins la partie création de la fenetre+menu.

  10. #10
    Membre habitué
    Avatar de moithibault
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2009
    Messages : 124
    Points : 142
    Points
    142
    Par défaut
    Voilà :

    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
    23
    24
     
    class MainMenu(Menu):
     
        def __init__(self, parent):
            Menu.__init__(self, parent)
            self._parent    = parent
            self.carte= carte=Menu(self,tearoff=0)
            self.mode  = mode=Menu(self,tearoff=0)
            self.offi =offi= Menu(mode,tearoff=0)
     
     
            self.add_cascade(label='Recommencer la partie', command=lambda:Program.plateau.reset())
     
            self.add_cascade(label='Charger une carte',menu=mode)
            mode.add_cascade(label='Carte officielle',menu=offi)
            listFichier=os.listdir('./levels/offi')
            a=0
            while a<(len(listFichier)-1):
              offi.add_command(label=str(listFichier[a]),command=lambda:self.load("offi/"+listFichier[a]))
              a+=1
              print listFichier[a]
     
    		[...]
    		self._parent.config(menu= self)
    Voici ensuite la création de la fenetre avec intégration du menu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class Program(object):
     
        fen=Tk()
        menu=MainMenu(fen)
     
     
    Program.fen.mainloop()

    PS: j'ai enlevé les lignes qui n'été pas utile (autre menus...)

    Merci

  11. #11
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Points : 1 384
    Points
    1 384
    Par défaut
    Bonsoir,

    le problème n'est pas lié à Tkinter mais à l'utilisation de lambda. Le code contenu dans l'expression lambda n'est pas évalué immédiatement mais uniquement lorsque la fonction retournée par l'expression lambda est appelée. Donc la valeur de file à l'exécution de la lambda est sa valeur au point d'appel, pas au point de définition (idem pour a dans le code de airod).
    Le code ci-dessous illustre également ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    >>> l = [1,2,3]
    >>> m = [lambda:e for e in l]
    >>> m
    [<function <lambda> at 0x00EF5830>, <function <lambda> at 0x00EF5770>, <function <lambda> at 0x00EF57B0>]
    >>> m[0]()
    3
    >>> del e
    >>> m[0]()
    Traceback (most recent call last):
      File "<interactive input>", line 1, in <module>
      File "<interactive input>", line 1, in <lambda>
    NameError: global name 'e' is not defined
    La solution "pythonesque" est liée à une autre caractéristique de python: les valeurs par défaut des arguments d'une fonction sont évalués à la définition, pas à l'appel.
    C'est d'ailleurs un autre piège de Python: si on donne un objet mutable comme valeur par défaut d'un argument, on risque des surprises:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >>> def f(x=[]):
    ... 	x.append(0)
    ... 	return x
    ... 
    >>> f()
    [0]
    >>> f()
    [0, 0]
    >>> f()
    [0, 0, 0]
    C'est la même liste qui est utilisée pour initialiser x lors de chaque appel. Comme cette liste est modifiée par la fonction, la liste ne sera plus vide après le premier appel.
    Dans ce cas-là, la solution est de ne pas passer d'objet mutable comme valeur par défaut d'un argument. On écrira plutôt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def f(x=None):
        if x is None: x = []
        ...
    Mais pour le problème qui nous occupe, on va exploiter ce fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> m = [lambda x=e:x for e in l]
    >>> m[0]()
    1
    >>> m[1]()
    2
    Il est idiomatique en Python d'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m = [lambda e=e:e for e in l]
    qui revient au même mais cela peut troubler si on ne l'a jamais vu.

    On a certes une lambda avec un argument à présent, mais comme cet argument possède une valeur par défaut, on peut toujours l'appeler de la même façon.

    Donc pour le code du PO, on peut écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    menu.add_command(label=file,command=lambda file=file:self.load(file))
    EDIT: [supprimé]
    EDIT 2 : suppression du premier EDIT, je disais des bêtises.

  12. #12
    Membre habitué
    Avatar de moithibault
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2009
    Messages : 124
    Points : 142
    Points
    142
    Par défaut
    Merci beaucoup !
    Ta proposition avant l'EDIT marche parfaitement . Merci pour l'explication même si je n'ai pas réellement tout compris mais j'ai compris le principe, tu me sauve la vie! Merci encore

    (merci a airod et joesmiley pour votre aide aussi)

  13. #13
    Membre éclairé
    Avatar de airod
    Homme Profil pro
    Gérant Associé, DMP Santé et Directeur technique
    Inscrit en
    Août 2004
    Messages
    767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Gérant Associé, DMP Santé et Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 767
    Points : 891
    Points
    891
    Par défaut
    agrrr, je savais bien qu'il fallait définir les arguments a passer a la fonction lorsque l'on utilise lambda....
    Pas eu le temps de revoir mes codes (ca fait super longtemps que j'ai pas eu besoin de lambda)...
    ca fait un rappel.... mais je pense qu'il serait aussi intérréssant de l'inclure dans la faq, c'est un problème qui doit revenir souvent! Qu'en pensez vous les admins?

  14. #14
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    Citation Envoyé par airod Voir le message
    agrrr, je savais bien qu'il fallait définir les arguments a passer a la fonction lorsque l'on utilise lambda....
    Pas vraiment :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Button(root, text="Valider", command = lambda newfav=EntryAddFav.get(): self.validefav(newfav)).pack()
    Ne fonctionne pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Button(root, text="Valider", command = lambda: self.validefav(EntryAddFav.get())).pack()
    Oui

    De même et si je n'ai pas besoin d'une variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    outilmenu.add_command(label="Navigateur Web", command=lambda: self.LancerProg('6'))
    Fonctionne aussi bien qu'un lambda x='6': self.LancerProg(x)

    Et pour finir l'objet envoyé n'est pas obligatoirement une variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    helpmenu.add_command(label="Demandes", command= lambda nv=Netsuivit(): nv.RetourBug(VersionNumber))
    (Pas jolie celui la )

    @+

    Edit:

    Comme mon dernier exemple n'est pas terrible je le remplacerais par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListResultRecherche.bind('<Button-4>', lambda event: event.widget.yview_scroll(-1, UNITS))
    Merci d'utiliser le forum pour les questions techniques.

  15. #15
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Points : 1 384
    Points
    1 384
    Par défaut
    Il faut peut-être nuancer un peu:

    Lorsque l'on désire utiliser dans la lambda une valeur qui est connue au moment de la création de la lambda, il faut utiliser cette technique.

    lambda var=expr1: expr2(var) --> C'est la valeur de expr1 au moment où la lambda est définie qui nous importe
    lambda : expr2(expr1) --> C'est la valeur de expr1 au moment où la lambda est exécutée qui nous importe.

    Les deux sont utiles, ça dépend de ce que l'on veut...

    Dans le premier exemple de PauseKawa:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Button(root, text="Valider", command = lambda newfav=EntryAddFav.get(): self.validefav(newfav)).pack()
    l'appel EntryAddFav.get() sera exécuté lorsque le bouton est créé et ce n'est certainement pas ce qu'on veut. Ce qu'on veut c'est récupérer la valeur de l'entry au moment où le callback (la lambda) est exécuté, càd quand on clique sur le bouton

  16. #16
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Et bien c'est plus clair lorsque dividee traduit

    Je rajouterais juste que lambda est aussi utilisable dans le cadre d'une procédure et non seulement d'une fonction. Donc pas besoin de variable.
    Merci d'utiliser le forum pour les questions techniques.

  17. #17
    Membre éclairé
    Avatar de airod
    Homme Profil pro
    Gérant Associé, DMP Santé et Directeur technique
    Inscrit en
    Août 2004
    Messages
    767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Gérant Associé, DMP Santé et Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 767
    Points : 891
    Points
    891
    Par défaut
    je parlais, de lambda dans le context du post!!!

  18. #18
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonsoir,

    Citation Envoyé par airod Voir le message
    je parlais, de lambda dans le context du post!!!
    Et je l'avais bien compris airod, c'était juste une remarque pour ta demande pour la Faq.
    La traduction de dividee est juste dans le cadre d'une fonction et je pense que mes remarques le sont dans le cadre d'une procédure.
    lambda est une merveille dans un command= ou d'un .bind sous Tkinter.

    Mais comme dit dividee, il faut peut-être nuancer un peu : Le sujet est en Résolu et je ne vais pas polluer celui de biot22

    @+
    Merci d'utiliser le forum pour les questions techniques.

  19. #19
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut @ dividee
    Tes deux messages et leurs explications m’ont laissé pantois.
    Comme je n’aime pas trop les fonctions lambda, j’ai déjà eu du mal à comprendre la signification de l’expression [lambda:e for e in l]
    Tout le reste, qui est passionant, m’a aussi demandé pas mal de phosphoration.

    Mais j’avoue que je garde le sentiment de ne pas avoir tout bien bien compris.

    Mon problème est que j’aime bien, ou j’ai besoin, de saisir ce qui se passe derrière les expressions, en coulisse du code textuel, au niveau de l’implémentation, savoir quels sont les objets, et les processus qui les affectent, qui sont en cause.

    Or, à mon avis, ce dont tu parles a à voir avec des caractères fondamentaux de l’implémentation de Python, au niveau de la construction des objets et des processus dans lesquels sont impliqués des arguments.
    Aussi cela m’intéresserait d’avoir tes éclaircissements sur un point qui n’est pas clair pour moi. Pas seulement dans ton post, d’une façon générale dans les docs. Mais comme tu en parles dans ton post, et avant de le laisser disparaître dans les profondeurs des pages >1 comme d’autres, je demande, toute honte bue:

    que recouvre exactement le terme “évaluer“ ?

    Le code contenu dans l'expression lambda n'est pas évalué immédiatement mais uniquement lorsque la fonction retournée par l'expression lambda est appelée.
    La solution "pythonesque" est liée à une autre caractéristique de python: les valeurs par défaut des arguments d'une fonction sont évalués à la définition, pas à l'appel.


    Il me semble qu’avnt de faire une exécution d’un programme, il y a une phase dans laquelle le texte du code est examiné (est-ce ce qu’on appelle analyse syntaxique ? est-ce l’interprétation ? par quoi est- ce fait, l’interpréteur ?... mystères opaques pour moi) pour établir un tas de trucs: espaces de noms, qualité de locale ou globale pour une variable... etc... je crois, je n’ai rien trouvé de précis sur ces aspects, ou je n’ai pas su trouver. Enfin bref.

    Ce que je veux dire, c’est que j’imagine que c’est dans cette phase préalable que se situe ce que tu appelles “définition“ et que c’est à cette phase que se réfère le terme “immédiatement“.

    Donc, dans ce que tu as écrit, je distingue deux sortes de moments, c’est à dire d’événements: les moments où quelque chose est défini, le moment où quelque chose est appelé.
    Ce quelque chose est-il toujours un objet ?
    Est-ce que “définition“ signifie “création d’un objet“.
    Est-ce que tu es d’accord avec l’idée que je me fais d’une création d’objet: délimitation d’une zone mémoire par une sorte de cloture qui consiste en je ne sais quoi et oganisation des bits à l’intérieur de cette zône pour la rendre apte à représenter une structure logique donnée ?
    Est-ce que “évaluer“ est synonyme de “définition“ et/ou “création d’objet“ ?

  20. #20
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour eyquem,

    Citation Envoyé par eyquem Voir le message

    que recouvre exactement le terme “évaluer“ ?

    Il me semble qu’avnt de faire une exécution d’un programme, il y a une phase dans laquelle le texte du code est examiné (est-ce ce qu’on appelle analyse syntaxique ? est-ce l’interprétation ? par quoi est- ce fait, l’interpréteur ?... mystères opaques pour moi) pour établir un tas de trucs: espaces de noms, qualité de locale ou globale pour une variable... etc... je crois, je n’ai rien trouvé de précis sur ces aspects, ou je n’ai pas su trouver. Enfin bref.

    Ce que je veux dire, c’est que j’imagine que c’est dans cette phase préalable que se situe ce que tu appelles “définition“ et que c’est à cette phase que se réfère le terme “immédiatement“.

    Donc, dans ce que tu as écrit, je distingue deux sortes de moments, c’est à dire d’événements: les moments où quelque chose est défini, le moment où quelque chose est appelé.
    Ce quelque chose est-il toujours un objet ?
    Est-ce que “définition“ signifie “création d’un objet“.
    Est-ce que tu es d’accord avec l’idée que je me fais d’une création d’objet: délimitation d’une zone mémoire par une sorte de cloture qui consiste en je ne sais quoi et oganisation des bits à l’intérieur de cette zône pour la rendre apte à représenter une structure logique donnée ?
    Est-ce que “évaluer“ est synonyme de “définition“ et/ou “création d’objet“ ?
    Dans la mesure de mes pauvres connaissances d'autodidacte il me semble que ce que tu appelle définition c'est la création des codes block (morceaux de code ayant une id et un binding référencé par un nom (mis dans un dico)) par la lecture du code (ce qui te donne les erreurs de syntaxe et autres au lancement par exemple).
    Lorsque le code est exécuté par l'appel du nom (dans son execution frame ?) les variables sont évalués.

    J'espere ne pas trop me planter.

    @+

    Edit: Je viens de retrouver ma source.

    @++
    Merci d'utiliser le forum pour les questions techniques.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. problème de changement de valeur d'une variable
    Par Mondhir01 dans le forum GUI
    Réponses: 0
    Dernier message: 30/05/2010, 22h45
  2. Réponses: 2
    Dernier message: 10/04/2008, 11h48
  3. Réponses: 2
    Dernier message: 11/02/2008, 22h02
  4. Réponses: 2
    Dernier message: 16/11/2007, 18h38
  5. Réponses: 2
    Dernier message: 21/09/2007, 17h27

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