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 :

decouvrir la logique du systeme de fonction


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    aquaboniste
    Inscrit en
    Octobre 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : aquaboniste

    Informations forums :
    Inscription : Octobre 2014
    Messages : 41
    Points : 10
    Points
    10
    Par défaut decouvrir la logique du systeme de fonction
    Bonjours a tous.
    j'apprends seul et je trouve une attitude du langage qui va contre ce qui a priori me semblerait devoir être logique.
    Ci dessous je copie quelques lignes de l’éditeur de texte, et encore en dessous le résultat dans l’interpréteur, puis enfin l'objet de mon etonnement.

    1- le texte.
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    a_var = 10
    # Ici "a_var" est le nom d'une variable globale
    b_var = 15
    e_var = 25
    
    def a_func(a_var):
    # ici le "a_var" est le nom de l'argument de la fonction "a_func" 
             print("in a_func a_var = ", a_var)
    # ici a_var n'a pas été défini. dans la fonction, donc il fait appel a a_var
    # comme valeur globale definie ci-dessus.
             b_var = 100 + a_var
    # ici b_var n'est plus la valeur globale citée ci-dessus mais une nouvelle
    # valeur, locale.
             d_var = 2 * a_var
             print("in a_func b_var = ", b_var)
             print("in a_func d_var = ", d_var)
             print("in a_func e_var = ", e_var)
             return(b_var + 10)
    
    c_var = a_func(b_var)
    
    print("a_var = ", a_var)
    print("b_var = ", b_var)
    
    print("c_var = ", c_var)
    2- l’interprétation
    >>> 
    in a_func a_var =  15
    in a_func b_var =  115
    in a_func d_var =  30
    in a_func e_var =  25
    a_var =  10
    b_var =  15
    c_var =  125
    >>>
    3- l’étonnement.
    pourquoi a_var prend la valeur de b_var plutôt que celle de e_var, même si en haut j'inverse l'ordre de la présentations de ces variables globales.
    c'est sûrement simple. J'ai loupe un des principes
    en commentaire sont inscrites les choses que j'ai cru comprendre. C'est une question sans arrière pensée. moi j'aurais mis a = 15 - 100

  2. #2
    Membre à l'essai
    Homme Profil pro
    aquaboniste
    Inscrit en
    Octobre 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : aquaboniste

    Informations forums :
    Inscription : Octobre 2014
    Messages : 41
    Points : 10
    Points
    10
    Par défaut AH
    je crois que j'ai pige
    c'est parce que
    quand on rappelle la fonction

    c_var = a_func(b_var)
    on attribue b_var a l'argument. j'ai essaye en chngeant et effectivement ca marche.
    Mais pourquoi est-ce si laid? je ne comprends pas a quoi sert ce principe de rappel.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2014
    Messages : 11
    Points : 16
    Points
    16
    Par défaut
    Bonjour,

    A mon avis, la confusion vient du fait que tu nommes tes variables à l'intérieur de la définition de ta fonction comme celles qui sont à l'extérieur. Essayons de renommer un peu les variables de ta fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def a_func(m_var):
             print("in a_func m_var = ", m_var)
             n_var = 100 + m_var
             p_var = 2 * m_var
             print("in a_func n_var = ", n_var)
             print("in a_func p_var = ", p_var)
             print("in a_func e_var = ", e_var)
             return(n_var + 10)
    Tu vois alors que seule e_var est une variable issue de l'extérieur de ta fonction. Lorsque tu écris :
    le paramètre m_var se voit attribuer la valeur de b_var.
    Si tu écris ensuite :
    le paramètre m_var se verra cette fois attribuer la valeur de a_var.


    Si malgré ces renommages, les choses te paraissent encore confuses, peut-être que l'un ou l'autre de ces cours pourrait t'éclairer :
    http://python.developpez.com/tutorie...paris7/#LXII-A
    http://python.developpez.com/cours/T...page=Chapitre7

  4. #4
    Membre à l'essai
    Homme Profil pro
    aquaboniste
    Inscrit en
    Octobre 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : aquaboniste

    Informations forums :
    Inscription : Octobre 2014
    Messages : 41
    Points : 10
    Points
    10
    Par défaut Merci petitchameau
    En fait ce script je l'ai copie dans le lien suivant:
    http://en.wikibooks.org/wiki/Non-Pro...ning_Functions
    Je crois que justement le but cherche en écrivant le même nom est d'apprendre a compartimenter dans sa tête le programme en parties indépendantes avec des cas de figures ou l'emplacement d'un même ne signifie pas une continuité de référence a celui-ci.
    reste a savoir pourquoi ce langage est ainsi fait.

  5. #5
    Membre à l'essai
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2014
    Messages : 11
    Points : 16
    Points
    16
    Par défaut
    Bonjour,

    Oui, c'était bien le but recherché.
    Pourquoi cette notion de variable locale ? C'est ça ta question ?

    La première raison qui me vient en tête est : Si toutes tes variables sont accessibles depuis n'importe quel endroit du code, il faut t'assurer qu'il n'y en ait pas deux qui aient le même nom au risque d'écrire sur une variable qui "appartient" ou "a un usage différent" pour une autre partie du code.
    Certains programmes font plusieurs centaines de milliers de lignes de code, tu imagines la galère ?

  6. #6
    Membre à l'essai
    Homme Profil pro
    aquaboniste
    Inscrit en
    Octobre 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : aquaboniste

    Informations forums :
    Inscription : Octobre 2014
    Messages : 41
    Points : 10
    Points
    10
    Par défaut Fin et rendez-vous au prochain episode
    Eh bien merci beaucoup.
    Et a tres prochainement sur ce beau forum.

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

Discussions similaires

  1. Générateur d'arbre binaire logique basé sur la fonction XNOR
    Par Invité dans le forum Mon programme
    Réponses: 2
    Dernier message: 14/06/2011, 19h04
  2. vue systeme des fonctions
    Par haykelFST dans le forum Développement
    Réponses: 1
    Dernier message: 29/11/2008, 12h40
  3. Réponses: 13
    Dernier message: 20/06/2005, 14h13
  4. Réponses: 2
    Dernier message: 30/03/2004, 11h31
  5. Réponses: 13
    Dernier message: 20/03/2003, 08h11

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