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 :

Fonction pour créer des variables


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2010
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2010
    Messages : 83
    Par défaut Fonction pour créer des variables
    Bonjour.
    J'ai fait les fonctions suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def var(variable,value):
        globals()[variable]=value
        return variable+'='+str(value)
    def rmvar(variable):
        globals()[eval(variable)]=None
        return ""
    Ça ne marche pas. Quelqu'un sait pourquoi ?
    Je galère la dessus depuis tout à l'heure, et je trouve pas.
    Merci.

  2. #2
    Membre Expert 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
    Par défaut
    Bonjour,

    Citation Envoyé par Spitfire 95 Voir le message
    Ça ne marche pas. Quelqu'un sait pourquoi ?
    Je galère la dessus depuis tout à l'heure, et je trouve pas.
    Merci.
    C'est le rmvar qui ne fonctionne pas ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    >>> def newvar(variable, value):
    ...     globals()[variable]=value
    ... 
    >>> def rmvar(variable):
    ...     del globals()[variable]
    ... 
    >>> newvar('A', 10)
    >>> print globals()
    {'A': 10, '__builtins__': <module '__builtin__' (built-in)>, 'rmvar': <function rmvar at 0xb77565dc>, 'newvar': <function newvar at 0x93463e4>, '__name__': '__main__', '__package__': None, '__doc__': None}
    >>> rmvar('A')
    >>> print globals()
    {'__builtins__': <module '__builtin__' (built-in)>, 'rmvar': <function rmvar at 0xb77565dc>, 'newvar': <function newvar at 0x93463e4>, '__name__': '__main__', '__package__': None, '__doc__': None}
    Ce n'est ('presque') qu'un dico après tout.
    Sinon j'ai fais une class (sur le modèle de la class variable de Tkinter get/set/callback..., dont je te recommande la lecture du code) dans ce sens si cela t'intéresse.

    @+

  3. #3
    Membre confirmé
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2010
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2010
    Messages : 83
    Par défaut
    Merci. En fait, RIEN ne marche. Ça fait deux mois que j'ai fait la fonction var, et il me semblait pourtant avoir testé, et ça marchait. Là, je modifie la fonction pour enregistrer les variables dans un fichier de configuration via configparser, rien ne marche plus. J'ai résolu pour cfgparser, mais ça ne marche toujours pas.
    Si vous voulez voir le code complet, l'archive installable est là : http://free-apps.evoconcept.net/down...latrice.tar.gz
    Attention, l'installation n'est possible que sous un système GNU/Linux.
    Le plus étrange, c'est qu'au début de mon code, j'ai ça qui fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for variable in cfg.options("Vars"):
         globals()[variable]=cfg.getfloat('Vars',variable)
    Je ne comprend pas d'où vient le problème. Un conflit entre la variable variable, locale à la classe et la variable global()[variable] ? Mais je ne vois pas comment contourner le problème. J'ai pensé aux alias de variables, mais ça ne m'avance pas beaucoup puisque si j'en change une, l'autre sera changée elle aussi.

    Merci.

  4. #4
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Moi, je trouve que ça marche! Voilà ce que j'ai fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    def var(variable,value):
        globals()[variable]=value
     
    var('A', 'toto')
     
    print A
    toto
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    def rmvar(variable):
        del globals()[variable]
     
    rmvar('A')
     
    print A
     
    Traceback (most recent call last):
      File "D:\Python\Pydev\test\test_AAR.py", line 25, in <module>
        print A
    NameError: name 'A' is not defined
    Et l'affichage du dictionnaire globals() reflète bien les opérations réalisées.

    Tyrtamos

  5. #5
    Membre confirmé
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2010
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2010
    Messages : 83
    Par défaut
    Non, ça marche pas chez moi. Je suis sous Ubuntu 10.10 avec Python 2.6.6.
    Voici le code complet des deux fonctions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def var(variable,value):
        """Crée une variable globale"""
        cfg.set("Vars",variable,value)
        cfg.write(open('.calculatrice/preferences.cfg','w'))
        globals()[variable]=value
        return variable+'='+str(value)
    def rmvar(variable):
        """Supprime une variable créée"""
        cfg.remove_option("Vars",variable)
        cfg.write(open('.calculatrice/preferences.cfg','w'))
        del globals()[variable]
        return ""
    Aucune erreur retournée, mais si je demande la variable, j'ai toujours une erreur "name [variable] is not defined".

    Et j'ai un autre problème, les variables enregistrées, comment choisir le bon type de données ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for variable in cfg.options("Vars"):
        globals()[variable]=cfg.getfloat('Vars',variable)
    J'avais pas pensé aux str. Comment choisir entre str et nombre ? Et entre int et float ? Moins important, mais ce serait plus pratique et plus économique pour la mémoire.
    Merci.

    Et @tyrtamos : Avec toute l'aide que vous m'avez apporté et les fonctions que je vous ai volées empruntées, je devais vous mettre dans les crédits. Je vous met comment dans ce code ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Label(c,text=_("Autres contributeurs"),font=bold).grid()
            Label(c,text=_("Arthur C.  Testeur des premières versions\nLes membres de python.developpez.com\nLes membres d'Ubuntu-fr.org\n")).grid()
    Et aux autre qui m'ont aidé, j'ai aussi pensé à vous, de façon groupée

  6. #6
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Je viens d'essayer le code que j'ai proposé plus haut sur ubuntu 10.10 (Python v2.6.6) et: ça marche pareil!

    Reprend mes fonctions et ajoute progressivement tes compléments pour savoir ce qui coince.

    Sinon, je suis ravi de t'avoir inspiré des morceaux de codes: ils sont là pour ça. Il te suffit de citer tes sources comme je le fais moi-même.

    Tyrtamos

Discussions similaires

  1. [IP-2010] Créer des "variables" temporaire pour l'affichage des titres
    Par MrMeteo dans le forum InfoPath
    Réponses: 1
    Dernier message: 26/02/2014, 20h56
  2. Comment créer des variables pour chaque ligne d'une table
    Par Slyvore dans le forum Développement de jobs
    Réponses: 4
    Dernier message: 24/04/2012, 14h24
  3. Réponses: 35
    Dernier message: 14/11/2008, 15h30
  4. Créer une fonction pour remplacer des caractères
    Par virtuadrack dans le forum C++
    Réponses: 4
    Dernier message: 11/09/2008, 14h52
  5. Créer fonctions pour saisir des nombres
    Par odsen.s dans le forum C
    Réponses: 34
    Dernier message: 30/04/2007, 19h34

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