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 :

Les variables et les fonctions


Sujet :

Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Les variables et les fonctions
    Bonjour,

    Je suis un étudiant (terminal S) et je fais l'option ISN( Informatique et Sciences du Numérique). Actuellement nous étudions le python, et nous devons pendant les vacances coder un programme. Le problème est qu'on nous a enseigner très peu de notions, et je me pose encore quelques questions sur les bases du langage, voici un exemple de l'un de mes problèmes :

    def fonction1(variable1):
    variable1 = 10
    return variable1

    variable1 = 0
    fonction1(variable1)
    print(variable1)


    Sur cet exemple, je ne comprend pas pourquoi le print(variable1) m'affiche 0 alors que la fonction est censé donner la valeur 10 à la variable, je pensais que la fonction return permettait de renvoyer la variable en question, or ça ne semble pas être le cas. Ce que je voudrais faire c'est modifier une variable x dans une fonction, et réutiliser cette variable modifiée dans une autre fonction, mais à chaque fois la variable reprend sa valeur initiale quand on sort de la fonction, je me pose alors 2 questions :

    -A quoi sert la fonction return ?
    -Comment utiliser une variable dans plusieurs fonctions ?

    J'espère avoir été clair, et je vous remercie d'avance !

  2. #2
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 824
    Points : 7 120
    Points
    7 120
    Par défaut
    Sur cet exemple, je ne comprend pas pourquoi le print(variable1) m'affiche 0 alors que la fonction est censé donner la valeur 10 à la variable
    ça c'est toi qui le dis

    Ce que je voudrais faire c'est modifier une variable x dans une fonction, et réutiliser cette variable modifiée dans une autre fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> def fonction1(valeur):
    ...     global variable1
    ...     variable1 = valeur
    ... 
    >>> variable1 = 0
    >>> fonction1(10)
    >>> variable1
    10
    Tu as des explications ici, sur la portée des variables

    -A quoi sert la fonction return ?
    Retourner une valeur, donc un objet (variable, fonction, instance, ...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> def fonction1(valeur):
    ...     return valeur
    ... 
    >>> variable1 = 0
    >>> print(variable1)
    0
    >>> variable1 = fonction1(10)
    >>> print(variable1)
    10
    -Comment utiliser une variable dans plusieurs fonctions ?
    En utilisant global, mais c'est moche, en général c'est une erreur de conception, il est très rare d'être obligé de les utiliser, on peut souvent éviter ce type de démarche.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  3. #3
    Membre habitué

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    211
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 211
    Points : 168
    Points
    168
    Billets dans le blog
    1
    Par défaut Quelques remarques.
    Bonjour l'Astucieux,

    J'aurais quelques remarques à faire sur la présentation de ton "problème" :
    1. Il y a une balise disponible pour introduire du code dans un message au-dessus de la fenêtre de saisie de u message (#).
    2. Python fonctionne avec des indentations qui sont absentes de tes exemples. Si tu as écrit ton code de cette manière, Python ne devrait pas trop s'y retrouver
    3. Utiliser le même nom pour la variable dans le type de paramètre passé à la fonction et dans la fonction, voire dans les utilisations de la fonction dans ton code t'expose à des déboires certains.

    Inspire-toi du code proposé par fred1599 pour écrire correctement. Cela sera plus conforme à ce qui doit être fait mais également, cela te permettra de mieux cerner tes "problèmes".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    def fonction1(variable1):   #(1)
        variable1 = 10             #(2)
        return variable1           #(3)
     
    variable1 = 0                   #(4)
    fonction1(variable1)          #(5)
    print(variable1)                 #(6)
    Tu écris que ta fonction ne fonctionne pas !? Mais que fais-tu ?
    (1) : tu crées la fonction en lui donnant un nom et en imposant la fourniture d'une valeur une valeur lors de son appel/utilisation plus tard dans ton code.
    Tu demandes une valeur quelconque alors qu'il vaut mieux, le plus souvent possible, définir le type de variable demandé (int, string, ...). cela permet un meilleur contrôle des valeurs utilisées.
    (2) : Tu donnes à la variable appelée "variable1" une certaine valeur
    (3) : Tu demandes à la fonction de retourner le contenu de "variable1"

    Jusque là ... ça va.
    Mais ensuite :

    (4) : Tu crées une nouvelle variable "variable1" qui n'a rien à voir avec celle contenue dans l'appel de la fonction. Cette "nouvelle" variable pourrait tout aussi bien s'appeler uneVar, Toto ou Quelquechose. Tu donnes la valeur 0 (zéro) à ta nouvelle variable.
    (5) : Tu appelles ta fonction en lui passant la valeur contenue dans ta nouvelle "variable1" (donc 0 zéro), celle qui n'a rien à voir avec l'appel à la fonction. Là, tu t'embrouille déjà l'esprit
    (6) : Tu crois imprimer la valeur retournée par ta fonction. Mais en réalité, tu ne fais qu'imprimer le contenu de ta nouvelle variable, c'est-à-dire 0 (zéro) Python fait bien ce que tu demandes

    Pour imprimer la valeur retournée par la fonction, c'est-à-dire 10, comme tu le souhaites, tu pourrais modifier ton code comme suit :
    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(variable1):
        laVar1 = 10     #Je crée une variable interne à la fonction qui va recevoir un valeur
                             #si j'écris, par exemple, ce qui suit :
        #laVar1 = variable1   #Ici, la variable interne reçoit la valeur que je passe à la fonction
                                     #lors de son appel. À toi de voir ce dont tu as besoin. C'est l'un ou l'autre.
        return laVar1   #La fonction retourne la valeur contenue dans laVar1
     
    uneVar = 0          #On donne une valeur à une variable globale nommée uneVar
    fonction1(uneVar) #On appelle la fonction en lui passant la valeur contenue dans laVar
    print(uneVar)        #On imprime le contenu de la variable uneVar soit la valeur 0
     
    unResultat = fonction1(0)   #On appelle la fonction en lui passant la valeur 0
    print unResultat                 #Dans le cas où c'est la première ligne de code dans 
                                #la fonction qui est active, on reçoit bien la valeur 10 dans print.
                                #si c'est la seconde option qui est active, alors on reçoit 0
    Tu aurais grand intérêt à lire - et étudier - le superbe bouquin de Swinnen (qui est aussi disponible en version téléchargeable.

    Ce code est sans prétention aucune. Il est purement "didactique" pour débutant ... que je suis

    A+

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 46
    Points : 27
    Points
    27
    Par défaut
    Salut tout le monde.

    Enfête ton problème l'Astucieux ce situe ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    variable1 = 0
    fonction1(variable1)   
    print(variable1)
    En effet, tu attribues la valeur 0 a variable1 (ligne 1). Deuxième ligne tu appliques ta fonction a cette variable MAIS tu n'enregistres pas le résultat !

    Donc en gros, tu utilises bien ta variable avec ta fonction, mais tu n'attribus pas sont résultat à variable1. Tu as donc deux possibilités qui ont été donné au dessus.

    Soit à la ligne deux tu fais un : variable1 = fonction1(variable1) (donc ici tu attribues à variable1 la valeur retourner par ta fonction.)

    Ou alors tu modifie un peu ta fonction comme l'a montré Fred.

    Concernant ta qestion sur comment utilisé une variable sur plusieurs fonctions, tu as en effet global mais comme dit il faut éviter. Le mieux reste cette méthode :

    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
     
    var_pour_plusieurs_fonc = 0
     
    def fonc1(x):
           final = x + 10
           return final
    def fonc2(x):
           final2 = x + 5
           return final2
    def fonc3(x):
           final_result = x * 3
           return final_result
     
    test1 = fonc1(var_pour_plusieurs_fonc) #On attribue le résultat de la fonction 1 qui utilise la variable var_...... à test 1
    print(test1) => 10
    test2 = fonc2(var_pour_plusieurs_fonc) #Pareil
    print(test2) => 5
    test3 = fonc3(test1) #Ici on attribue le résultat de notre fonc3 en utilisant le résultat de notre fonc1
    print(test3) => 30
    test4 = fonc3(test2)
    print(test4) => 15

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Oh tout commence à s'éclaircir ! Je n'avais pas réellement saisit l'utilisation de fonction maintenant ça commence à rentrer. En faite dans toutes mes fonctions je mettaient en paramètre les variables que je voulais modifier, mais en réalité je créer d'autres variables, merci de votre aide je ne serais pas aller bien loin avec ma méthode

  6. #6
    Membre habitué

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    211
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 211
    Points : 168
    Points
    168
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par l'astucieux Voir le message
    ... Je n'avais pas réellement saisit l'utilisation de fonction maintenant ça commence à rentrer. En faite dans toutes mes fonctions je mettaient en paramètre les variables que je voulais modifier, mais en réalité je créer d'autres variables, merci de votre aide je ne serais pas aller bien loin avec ma méthode
    En effet, c'est à peu près cela.
    Une fonction peut être comprise comme une succession d'opérations qui sont effectuées avec les valeurs qui sont passées en paramètres de la fonction.
    Et la fonction, au final, retourne le résultat des opérations.
    Cela permet de ne pas encombrer le code de ces opérations, mais aussi de pouvoir plus facilement relire son code plus tard, de ne pas devoir écrire ces opérations plusieurs fois si elles sont récurrentes dans le code.

    Il est en effet plus clair d'écrire (en pseudo-code ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    def FonctionPlus(variable1, variable2)   #Déclaration de la fonction
        résultat = variable1 + variable2    #un des opérations effectuées dans la fonction
              #mais les opérations peuvent être bien plus complexes et se rapporter à d'autres
              #types de variables que des nombres, bien entendu.
        return résultat    #ce que la fonction retourne
     
    #Puis dans le code principal :
    #instructions diverses ...
    res1 = FonctionPlus(12, 7.5)
    #... d'autres instructions ...
    res2 = FonctionPlus(3.22, 0)
    #etc.
    Et donc, en donnant des noms explicites à tes fonctions, lorsque leur appel apparaît dans le code, il te sera plus aisé de te rappeler ce qu'elle fait.

    Un code peut, devrait pouvoir évoluer et il vaut mieux mettre tous les atouts de ton côté pour une future modification de ton code. Car personne ne peut affirmer pouvoir se souvenir exactement des actions contenues dans un code écrit il y a 15 jours, 6 mois, 2 ans.

    A+

Discussions similaires

  1. Comment exploiter les variables dans une fonction ?
    Par spawns dans le forum Langage
    Réponses: 2
    Dernier message: 20/06/2011, 00h06
  2. [XL-2007] Insérer une variable dans les paramètre d'un fonction
    Par anolo40 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 17/01/2011, 21h08
  3. Formulaires : envoyer les variables de la fonction
    Par Corinne dans le forum Général JavaScript
    Réponses: 23
    Dernier message: 27/07/2007, 18h00
  4. j'ai un problème avec les évenement et les variables !!
    Par cvb dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 06/12/2005, 11h03

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