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 :

Récupérer des variables dans une fonction [Python 2.X]


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2015
    Messages : 29
    Points : 18
    Points
    18
    Par défaut Récupérer des variables dans une fonction
    Bonjour,
    je débute tout juste en programmation (j'ai env 2 semaines de python entre bouquins et net) et j'ai un souci dans le programme que je dois réaliser lors de mon stage.

    J'ai défini une fonction qui attribue des valeurs à des variables et je n'arrive pas à récupérer ces variables en dehors de cette fonction (alors qu'elles sont bien visibles dans la fonction elle-même). J'ai essayé de placer ces variables dans une liste mais le problème est le même : Python me retourne une erreur de name 'variable' (ou ' list') is not defined alors que je la mets dans le return de la fonction
    Je galère là dessus depuis ce matin en essyant un peu tout dans tous les sens mais sans résultats.
    Le but est un peu plus complexe mais tant que je n'aurais pas compris pourquoi ça ne marche pas, je n'avancerai pas...
    (le but est de créer un module qui sera ensuite réutilisé en import dans plusieurs scripts différents.
    si quelqu'un peut m'éclairer...

    voici le code
    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
    import os
     
    def attribuer_valeur():
    	chaine1 ="toto"
    	chaine2 = "titi"
    	chaine3 = "tata"
    	print chaine1
    	print chaine2
    	print chaine3
    	listchaine = [chaine1, chaine2, chaine3]
    	print (listchaine)
    	os.system("pause")
    	return chaine1
     
    attribuer_valeur()
    print listchaine
     
    os.system("pause")

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 440
    Points : 37 032
    Points
    37 032
    Par défaut
    Salut,

    Si vous n'assignez pas ce que retourne la fonction à une variable, impossible d'y accéder.
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> def f(n):
    ...    return 2*n
    ...
    >>> x = f(2)
    >>> print(x)
    4
    - W

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2015
    Messages : 29
    Points : 18
    Points
    18
    Par défaut
    Merci
    C'est ce que j'avais cru comprendre au travers de tous mes essais.
    Que me conseillez-vous pour réaliser ce que je souhaite faire? Existe-t'il des fonctions ou des modules qui réalisent ce genre d'affectation?

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 440
    Points : 37 032
    Points
    37 032
    Par défaut
    Salut,

    Citation Envoyé par olivier.breheret Voir le message
    Que me conseillez-vous pour réaliser ce que je souhaite faire? Existe-t'il des fonctions ou des modules qui réalisent ce genre d'affectation?
    Pour écrire une fonction qui retourne un objet via "return" ?
    Pour assigner son retour à une variable?

    - W

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2015
    Messages : 29
    Points : 18
    Points
    18
    Par défaut
    En fait ce "module" devra permettre d'attribuer des noms de fichiers en fonction de la date et du moment de leur création :

    dans un cas nous sommes sur la phase matin et je voudrais obtenir de la fonction :
    fichier_dejeuner = ("DT_"+date+"_A1_Dejeuner.xml")
    fichier_dejeunerJ7 = ("DT_"+dateJ7+"_A1_DejeunerJ7.xml")
    fichier_decoupage=(Decoupage_date_Dejeuner.csv)
    ce qui me permettrait de tester la présence de fichiers sources (xml) au bon format et de créer un fichier destination (csv) en adéquation
    #J'ai déjà codé ce qui me permet d'obtenir un string de date et de date à j+7

    Mais une seconde fonction devra me permettre de faire la même chose l'après-midi:
    fichier_diner = ("DT_"+date+"_A1_Dinerr.xml")
    fichier_dinerrJ7 = ("DT_"+dateJ7+"_A1_DinerJ7.xml")
    fichier_decoupage=(Decoupage_date_Diner.csv)

    Le soucis est que, dans cet exempla, j'ai une variable commune (fichier_decoupage) qui est affectée de 2 string différentes selon si on est le matin ou l'après-midi. (et ce n'est qu'un extrait, dans l'absolu il y en aura 7...)

    c'est essentiel pour la suite du script qui fait tout le traitement des xml(pour ne pas tout répéter 2 fois....)

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 440
    Points : 37 032
    Points
    37 032
    Par défaut
    Salut,

    Je ne comprends pas où est votre problème sinon qu'il y en a au moins 2:
    • le boulot fait par la fonction en question,
    • l'interface (comment l'utiliser) avec cette fonction,

    Et vous voyez que zappe la question de "module" qui n'est qu'une question d'emballage (ou poser la fonction).

    D'après ce que vous racontez, on peut commencer avec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def fonction(date=None, meridiem='am'):
          ...
          return dejeuner, dejeunerJ7, decoupage
    Le boulot de la fonction est représenté par "..." i.e. indéfini mais c'est suffisant.
    La fonction accepte 2 paramètres: date et meridiem et des défauts.
    Elle retourne un tuple: dejeuner, dejeunerJ7, decoupage

    Pour l'utiliser, il suffit de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dejeuner, dejeunerJ7, decoupage  = fonction()
    - W

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2015
    Messages : 29
    Points : 18
    Points
    18
    Par défaut
    Je n ecomprends pas trop cette réponse étant donné que le nom du fichier doit contenir la date (donc pourquoi date = none?) et que meridiem est fixé à am (alors que dans mon cas il est variable : d'ailleurs ce n'est pas tout à fait am et pm mais plutôt une plage horaire genre 5-11 ou 14-20 h)
    Néanmoins, je vais creuser dans le sens que vous m'indiquez et je vous tiens au courant.
    Merci

  8. #8
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 609
    Points : 2 073
    Points
    2 073
    Par défaut
    Citation Envoyé par olivier.breheret Voir le message
    Je n ecomprends pas trop cette réponse étant donné que le nom du fichier doit contenir la date (donc pourquoi date = none?) et que meridiem est fixé à am (alors que dans mon cas il est variable : d'ailleurs ce n'est pas tout à fait am et pm mais plutôt une plage horaire genre 5-11 ou 14-20 h)
    Néanmoins, je vais creuser dans le sens que vous m'indiquez et je vous tiens au courant.
    Merci
    Il faudrait sans doute commencer par les bases car manifestement, vous avez zappé des étapes dans votre apprentissage. Le Swinnen est très bien.
    http://www.developpez.net/forums/d11...erard-swinnen/

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 440
    Points : 37 032
    Points
    37 032
    Par défaut
    Salut,

    Citation Envoyé par olivier.breheret Voir le message
    Je n ecomprends pas trop cette réponse étant donné que le nom du fichier doit contenir la date (donc pourquoi date = none?) et que meridiem est fixé à am (alors que dans mon cas il est variable : d'ailleurs ce n'est pas tout à fait am et pm mais plutôt une plage horaire genre 5-11 ou 14-20 h)
    Vous pouvez choisir 0, 1 comme index dans les plages horaires qui vous intéressent.
    note: vous allez les représenter comment? Ah oui, vous proposiez de faire deux fonctions qui font peu ou prou le même boulot à cela près...

    "date" est à None car c'est une bonne valeur par défaut pour un exemple.

    Reste que vous avez à découper le boulot en deux parties: l'interface et le service que çà doit rendre.
    Savoir où passer le couteau pour définir l'interface et rôle et responsabilité entre appelant et appelé est un boulot de boucher: il faut un grand couteau et surtout pas de regrets car une fois que la viande est tranchée, c'est tranché. Je vous propose un truc, vous pouvez en préférez un autre... in fine, c'est vous qui allez coder donc vous le faites comme vous sentez pourvu qu'à la fin çà fonctionne n'a pas grande importance (enfin si mais nous ne sommes pas dans le forum conception mais dans un forum de programmation accessoirement Python... Dit autrement, les seules questions que vous devriez poser ici devrait porter sur comment réaliser le service attendu par la fonction et non sur qu'est-ce qui lui est donné et ce qu'on en reçoit).

    - W

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2015
    Messages : 29
    Points : 18
    Points
    18
    Par défaut
    Merci pour le lien mais je suis en 2.7 (imposé par la société où je suis en stage.
    Comme je le disais, je vais creuser les différentes pistes proposées.
    quant au dernier message : c'est du charabia pour moi!! et ouais je débute...... mais je suis là!
    slts

  11. #11
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 739
    Points : 31 068
    Points
    31 068
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par olivier.breheret Voir le message
    Merci pour le lien mais je suis en 2.7 (imposé par la société où je suis en stage.
    Bonjour

    Le swinnen existe aussi pour 2.7.
    Sinon pour ton histoire de noms j'ai rien compris. Toutefois ce que wiztricks tente de t'expliquer, c'est que "déjeuner" ou "diner" c'est en fait (du point de vue Python) exactement la même chose (une simple string qui change de valeur) donc tu peux alors écrire une seule fonction générale qui factorisera tout ce qui est commun dans un code fixe, et récupèrera tout ce qui dépend de l'environnement (matin ou soir) sous forme de paramètre que l'appelant devra posiitonner correctement.

    Sinon pour le reste une fonction Python c'est de la balle. Elle peut te renvoyer des trucs tout simples (comme des int/char/float) ou bien des trucs super complexes (comme des listes/dicos/objets). wiztricks te montre un exemple d'une fonction renvoyant un tuple de 3 valeurs que tu peux récupérer en une opération dans 3 variables distinctes....

  12. #12
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2015
    Messages : 29
    Points : 18
    Points
    18
    Par défaut
    Merci à tous!
    A la lumière de vos explications j'ai réussi à faire ce que je voulais (même mieux car je n'ai qu'un module, là où j'en avais imaginé 2)
    l'utilisation d'un tuple est effectivement la soluce

  13. #13
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2023
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 24
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2023
    Messages : 2
    Points : 0
    Points
    0
    Par défaut Utilisez la variables global.
    Citation Envoyé par wiztricks Voir le message
    Salut,

    Si vous n'assignez pas ce que retourne la fonction à une variable, impossible d'y accéder.
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> def f(n):
    ...    return 2*n
    ...
    >>> x = f(2)
    >>> print(x)
    4
    - W

  14. #14
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 739
    Points : 31 068
    Points
    31 068
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Elsita Voir le message
    Utilisez la variables global.
    Ouais alors réouvrir un topic 7 ans après pour dire une bêtise pareille c'était vraiment pas la peine !!! Les variables globales ne sont pas là pour éviter d'avoir à réfléchir mais pour résoudre des problèmes qu'on ne peut pas résoudre autrement. Commencez par apprendre Python avant de vouloir l'enseigner.

  15. #15
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2023
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 24
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2023
    Messages : 2
    Points : 0
    Points
    0
    Par défaut Bonsoir à tous.
    Citation Envoyé par olivier.breheret Voir le message
    Merci
    C'est ce que j'avais cru comprendre au travers de tous mes essais.
    Que me conseillez-vous pour réaliser ce que je souhaite faire? Existe-t'il des fonctions ou des modules qui réalisent ce genre d'affectation?

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

Discussions similaires

  1. Passer des variables dans une fonction
    Par Herlece dans le forum PL/SQL
    Réponses: 11
    Dernier message: 11/07/2008, 15h18
  2. [Regex] Récupérer des Variables dans une phrase.
    Par Jimmy_S dans le forum Windows Forms
    Réponses: 3
    Dernier message: 28/05/2008, 21h50
  3. [D5] Créer dynamiquement des variables dans une fonction
    Par MelkInarian dans le forum Delphi
    Réponses: 11
    Dernier message: 14/04/2007, 13h16
  4. Réponses: 4
    Dernier message: 09/08/2006, 16h14
  5. [AS2] déclarer des variables dans une fonction
    Par ooyeah dans le forum ActionScript 1 & ActionScript 2
    Réponses: 12
    Dernier message: 02/08/2005, 13h50

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