souci avec portée variable
Répondre à la discussion
Affichage des résultats 1 à 12 sur 12

souci avec portée variable



  1. #1
    invite06c66a72

    souci avec portée variable


    ------

    bonjour a tous

    sur python :2.x
    soit la fonctions suivante:

    def function_lvl_1():
    ....a=50
    ....def function_lvl_2():
    ........#opération de modification sur #a
    ........global a
    ........a=a/2
    ....function_lvl_2() # j'appelle la fonction
    ....return a

    >>> function_lvl_1():
    50


    je m'atteandait à avoir 25

    d'ou la question : comment modifier une variable définies dans une fonction(lvl1) avec une autre fonction crée dedans (lvl2)
    apparemment gloabal a rend la variable connues dans le main et ce n'est pas ce que je veux
    merci.

    -----

  2. #2
    invite43901482

    Re : siuci avec portée variable

    Code:
    def function_lvl_1():
        a=50
        def function_lvl_2():
            b = a/2
            return b
        a = function_lvl_2()
        return a
    
    print(function_lvl_1())

  3. #3
    invite06c66a72

    Re : siuci avec portée variable

    merci pour ta reponse,
    ma varaible ,réellement, va être une liste, que je vais modifier ene boucle en lui ajoutant des elements,
    je voudrais savoir comment faire pour pouvoir modifier la variable directement comme dans le main

    a=50
    def diviser_a():
    ...global a
    ...a=a/2
    return None

    >>>a
    25

    Merci.
    vous faites comment pour ecrire le code dans un cadre ^^'

  4. #4
    invite33838c81

    Re : siuci avec portée variable

    Pour le code en cadre, il faut utiliser les balises code ( en majuscules ).

    Par contre un truc important : évite de déclarer des fonctions dans des fonctions. Tu peux bien sûr appeler des fonctions dans une fonction, mais pas les déclarer, c'est pas propre ( je ne sais même pas si la fonction est déclaré dans l'espace global en opérant de cette manière du coup).

    Ensuite, afin de modifier une variable locale depuis une autre partie de ton code, pourquoi ne pas tout simplement la passer en argument ?

  5. A voir en vidéo sur Futura
  6. #5
    invite43901482

    Re : siuci avec portée variable

    @Grimmys, +1

    @tsumey,

    Donne nous un code exemple où ça ne fonctionne pas, ainsi qu'un exemple où tu présentes le problème de départ avec un objet python et la sortie que tu souhaites attendre. Parles nous aussi de cette boucle qui semble t'embêter...

  7. #6
    invite0bbe92c0

    Re : siuci avec portée variable

    Citation Envoyé par Grimmys Voir le message
    évite de déclarer des fonctions dans des fonctions. Tu peux bien sûr appeler des fonctions dans une fonction, mais pas les déclarer, c'est pas propre ( je ne sais même pas si la fonction est déclaré dans l'espace global en opérant de cette manière du coup).
    Non, pour les langages supportant l'imbrication de fonction, la déclaration de fonction est locale à la fonction container, et pas dans l'espace global. C'est vrai que c'est assez crade mais avec les langages non objet ça peut parfois avoir son utilité.

  8. #7
    invite33838c81

    Re : souci avec portée variable

    Effectivement, je suis d'accord avec toi, ça peut servir pour les langages impératifs ( c'est en fait une fonction qui prendrait plus ou moins le rôle d'une méthode ).

    Sauf qu'en l’occurrence, nous sommes en Python, langage qui accepte la programmation impérative, mais qui traite aussi la POO.

    Du coup, imbriquer des fonctions n'a vraiment pas d'utilité... Quand on peut s'en passer, c'est toujours mieux.

  9. #8
    invite0bbe92c0

    Re : souci avec portée variable

    Citation Envoyé par Grimmys Voir le message
    Effectivement, je suis d'accord avec toi, ça peut servir pour les langages impératifs ( c'est en fait une fonction qui prendrait plus ou moins le rôle d'une méthode ).

    Sauf qu'en l’occurrence, nous sommes en Python, langage qui accepte la programmation impérative, mais qui traite aussi la POO..
    La POO n'est pas du tout antinomique avec la programmation impérative.
    Le "contraire" de la programmation impérative c'est la programmation fonctionnelle.
    Il existe des langages fonctionnels OO (Haskell, OCAML, Scala, F#, Clojure, Groovy, Go, etc ..) mais le plus ancien des langages fonctionnel est bien antérieur à l'idée de la COO (LISP).
    SQL est, dans son domaine d'utilisation, clairement un langage fonctionnel non objet.
    D'autres langages, comme Python, peuvent être multiparadigme (impératif et fonctionnel).

  10. #9
    invite33838c81

    Re : souci avec portée variable

    Oui je voulais plutôt sous-entendre un langage uniquement impératif.

    Je sais que Python gère les deux à la fois.

    Pardon pour la mauvaise expression...

  11. #10
    invite06c66a72

    Re : souci avec portée variable

    Merci pour vos reponses, en effets j'ai laissé tomber l'idée de déclarer une fonction dans une autre.
    je cherchais à savoir aussi si ca vous surprendrait. finalement c'est pas une bonne manière de programmer.

  12. #11
    invite06c66a72

    Re : souci avec portée variable

    au même temps je pense que je devrais me documenter sur la notion de portée de variable,
    à la base je suis pas informaticien...

  13. #12
    invite0bbe92c0

    Re : souci avec portée variable

    Bonjour

    Citation Envoyé par tsumey Voir le message
    au même temps je pense que je devrais me documenter sur la notion de portée de variable,
    à la base je suis pas informaticien...
    Un article assez complet sur la question sur wiki : http://en.wikipedia.org/wiki/Scope_%...ter_science%29
    L'avantage est qu'il aborde le concept sans le prisme du choix d'un langage en particulier.

Discussions similaires

  1. connaitre vitesse initiale d'un jet avec portée et hauteur
    Par invite83b14738 dans le forum Physique
    Réponses: 14
    Dernier message: 02/05/2020, 11h45
  2. Java: portée d'une variable
    Par inviteec9c3db3 dans le forum Programmation et langages, Algorithmique
    Réponses: 13
    Dernier message: 21/03/2014, 02h08
  3. Réponses: 13
    Dernier message: 20/05/2012, 18h08
  4. Portée avec frottements.
    Par invitea250c65c dans le forum Physique
    Réponses: 1
    Dernier message: 30/08/2009, 19h08
  5. Réponses: 4
    Dernier message: 20/03/2008, 11h03