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 :

Fonctions en cascade [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 15
    Par défaut Fonctions en cascade
    Bonjour,

    Je fais face à un problème qui devrait sembler basique à beaucoup d'entre vous, surtout avec le code simplifié que je vais vous indiquer... mais je me permets quand même de poser ma question.
    J'aimerais appeler dans une fonction, une variable définie dans la fonction précédente.
    Dans un premier temps, j'ai bêtement écrit ceci :

    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
    def fonction1():
        a = 1
        b = 2
        c = a+b
        print(c)
        return c
     
     
    def fonction2():
        d = c + 3
        print(d)
     
    fonction1()
     
    fonction2()
    Cela ne fonctionnant pas (l'erreur est ici NameError: name 'c' is not defined), j'ai tenté plusieurs choses :

    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
    def fonction1():
        a = 1
        b = 2
        c = a+b
        print(c)
        return c
     
     
    def fonction2():
        import fonction1
        d = c + 3
        print(d)
     
    fonction1()
     
    fonction2()
    Je retourne comme erreur : ModuleNotFoundError: No module named 'fonction1'

    Ou encore

    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
    def fonction1():
        a = 1
        b = 2
        c = a+b
        print(c)
        return c
     
     
    def fonction2():
        c = fonction1.c
        d = c + 3
        print(d)
     
    fonction1()
     
    fonction2()
    erreur : AttributeError: 'function' object has no attribute 'c'


    J'avoue que je sèche un peu là... pourriez-vous m'aiguiller ?

    merci d'avance

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 744
    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 744
    Par défaut
    Salut,

    Citation Envoyé par jahawai Voir le message
    J'avoue que je sèche un peu là... pourriez-vous m'aiguiller ?
    Les variables définies dans une fonction n'existent que lorsque la fonction est active et disparaissent lorsque la fonction se termine: c'est comme çà.... Et vous devez en prendre compte pour découper votre code en fonction (et pas espérer que la magie le fera fonctionner).
    Par contre, une fonction peut retourner un résultat qui pourra être récupérer par l'appelant.

    Mais tout cela est raconté en détails dans tous les tutos. Côté Swinnen, c'est ici.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 15
    Par défaut
    Bonsoir,

    Merci pour cette réponse.
    Je posais la question car je n'avais justement pas trouvé de réponses dans les nombreux tutos que j'ai parcourus. J'ai donc confirmation qu'une variable est propre à une fonction et je vais écrire mon code différemment.
    Mais je tentais quand même ma chance car quelqu'un de plus expérimenté aurait bien pu se poser la même question et la résoudre (d'une manière ou d'une autre)...

    Ok, pour appeler un résultat de fonction, je le fais par ailleurs, mais j'avais un autre besoin ici.

    A bientôt,

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 744
    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 744
    Par défaut
    Salut,

    Citation Envoyé par jahawai Voir le message
    Je posais la question car je n'avais justement pas trouvé de réponses dans les nombreux tutos que j'ai parcourus.
    Aller de tuto en tuto ne sert à rien: vous devez en choisir un (qui vous plaît) et prendre le temps de vous l'approprier.... pour retourner voir les chapitres qui parlent de fonctions: ils expliquent aussi la portée des variables (locales et globales).

    Citation Envoyé par jahawai Voir le message
    Mais je tentais quand même ma chance car quelqu'un de plus expérimenté aurait bien pu se poser la même question et la résoudre (d'une manière ou d'une autre)...
    Ça peut se faire en considérant la fonction comme un objet...
    Mais pour çà, il faut déjà avoir fait ses premiers pas en POO.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    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
    def fonction1():
        a = 1
        b = 2
        c = a+b
        print(c)
        return c
     
     
    def fonction2():
        #### c = fonction1.c  ### Non ! Pour capturer le return de fonction1 on procède comme ça :
        c = fonction1()
        d = c + 3
        print(d)
     
    fonction1()
    fonction2()

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 15
    Par défaut
    Bonjour,

    Merci pour cette nouvelle réponse.

    Effectivement, cette solution fonctionne, et je fais cela par ailleurs.
    En fait, pour préciser un peu mon besoin : ma fonction fait plusieurs choses, dont obtenir des résultats de calcul sous la forme d'une liste. Et c'est uniquement cette liste que je souhaiterais récupérer. Votre solution fonctionne dans le cas de mon exemple (très simplifié) mais présente le problème qu'elle relance les autres tâches de ma fonction dans mon code.
    Or je voudrais seulement récupérer ma liste (un des résultats de ma fonction1) pour l'utiliser dans la fonction2.

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

Discussions similaires

  1. [awk] Appel de fonctions en cascade
    Par Taxan dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 03/08/2013, 13h57
  2. fonction pour filtrage avec des combobox en cascade
    Par Montor dans le forum Contribuez
    Réponses: 3
    Dernier message: 09/11/2009, 12h05
  3. Fonctions en cascade
    Par meier dans le forum MATLAB
    Réponses: 3
    Dernier message: 13/08/2009, 08h49
  4. VBA-E:Fonction SumIf en cascade
    Par deaqu1 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/04/2007, 14h03
  5. fonctions en cascade
    Par daemon2a dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/02/2006, 07h32

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