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 :

adressage indirect d'une variable [Python 3.X]


Sujet :

Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Agronome é la retraite
    Inscrit en
    Avril 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Agronome é la retraite
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2013
    Messages : 9
    Points : 9
    Points
    9
    Par défaut adressage indirect d'une variable
    Bonjour la compagnie
    Mon message d'hier ne serait pas passé, je recommence

    Je cherche à lire une variable, une liste, un fichier (par ex V1) en lisant son adresse placée dans une autre variable (par ex V2="V1"). Pas de solution dans les divers livres ou sites consultés . On pourrait imaginer une fonction trans() mais le coeur du problème reste à résoudre.

    La raison de cette question: je rédige un script pour récupérer des données (.cgi) de mon système de gestion photovoltaique et les envoyer (.txt ou .json) sur mon site internet via RapberryPi et 3G. Cela suppose plusieurs transformations fichier -> variable, extractions de sous-chaines, changement de date etc. J'utilise le même nom lors des transformation pour simplifier la lecture d'ou l'intérêt d'une variable contenant les noms

    Un petit coup de main ne ferait pas de mal?
    Merci et bonne soirée

  2. #2
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 180
    Points : 321
    Points
    321
    Par défaut
    Ou je me trompe ou vous avez fait du c ou du Pascal,

    En Python, il n'y a pas de pointeur. Mais il existe une classe qui répond à votre attente c'est dict. En gros, c'est un tableau dont l'adressage se fait par un nom ou tout type invariant de données (str, float, date...).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    mondict = dict(nom=0)
    print(mondict('nom'))
    mondict['nom'] = 22
    Voir la documentation https://docs.python.org/3/library/st...ight=dict#dict
    Pour vos difficultés, je vous recommande fortement de poster un bout de code qui les illustre. Cela nous aidera beaucoup à vous aider.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Agronome é la retraite
    Inscrit en
    Avril 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Agronome é la retraite
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2013
    Messages : 9
    Points : 9
    Points
    9
    Par défaut adressage: suite et fin
    Merci Chticricri,
    Lille ou Arras?
    Non, ni C ni Pascal, un peu de basic ou VB...
    Je vais fouiller ce dict on verra ce que cela donne
    Merci et bonne soirée demain!

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur banc de test
    Inscrit en
    Mai 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur banc de test
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 199
    Points : 482
    Points
    482
    Par défaut
    Bonjour,
    le passage par référence existe bel et bien en python, plutôt que de faire passer une valeur on fait passer une référence de l'objet d'origine et on peut ainsi modifier son contenu.

    En C/C++ on parle beaucoup de pointeurs mais il existe aussi les références, le principe est identique c'est juste la syntaxe qui diffère.

    En python pour que le paramètre soit passé par référence plutôt que par valeur il suffit d'utiliser des objets/types dits mutables.

    Pour plus d'infos : python.org - How do I write a function with output parameters (call by reference)

    Objets dits immutable : Les nombres (int, float, ..), le texte (str), les tuples
    Si on fait passer un objet immutable en paramètre et que la fonction modifie la valeur elle ne sera modifiée qu'en local et ne va pas modifier l'objet passé en argument. On parle ici d'un passage par valeur.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def f_immutable(val):
    	print(id(val))
    	val = 5
    	print(id(val))
    a = 0
    print(id(a))
    f_immutable(a)
    assert a == 0
    print(id(a))
    Dans la fonction l'ID de val au départ est la même que la variable a
    Au changement de la valeur la variable val est affectée ailleurs, dans un espace différent de a.
    a conserve son ID d'origine et vaut toujours 0


    Objets dits mutable : Les dictionnaires (dict), les listes (list) et les instances de classes.
    Si on fait passer un objet mutable en paramètre et qu'on modifie les valeurs/le contenu de l'objet la modification sera apportée sur l'objet passé en argument. On parle ici d'un passage par référence.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def f_mutable(ref):
    	print(id(ref))
    	ref[0] = 5
    	print(id(ref))
    a = [0,]
    print(id(a))
    f_mutable(a)
    assert a == [5,]
    print(id(a))
    Dans la fonction l'ID de ref reste toujours la même même après changement, c'est la même qui a passé en référence.
    a conserve son ID d'origine mais son contenu vaut maintenant 5.

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

Discussions similaires

  1. STEP 7 : adressage indirect sur une plage de données
    Par ClownTriste dans le forum Automation
    Réponses: 6
    Dernier message: 14/09/2016, 12h15
  2. [Lazarus] [0.9.29] Indirection sur une variable ?
    Par Invité dans le forum Lazarus
    Réponses: 12
    Dernier message: 17/07/2010, 18h23
  3. Réponses: 2
    Dernier message: 03/03/2009, 10h10
  4. Réponses: 2
    Dernier message: 15/05/2008, 16h47
  5. Réponses: 4
    Dernier message: 05/06/2002, 14h35

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