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 :

Questions sur les fonctions


Sujet :

Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique

    Informations forums :
    Inscription : Septembre 2015
    Messages : 16
    Points : 8
    Points
    8
    Par défaut Questions sur les fonctions
    Bonjour à tous,

    Est ce qu'il est possible de créer une procédure où l'on modifierai une variable.
    par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def MaFct(toto,titi) :
     titi = toto + 1
    et dans mon programme principal quand je lance MaFct(a,b), b serait modifié.

    Merci d'avance!

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Le code que tu montres est censé produire ce que tu demandes. Donc quelle est la question ?

    L'argument titi passé à la fonction est inutile, par contre.

  3. #3
    Membre éprouvé
    Homme Profil pro
    Aucune activité
    Inscrit en
    Novembre 2011
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Aucune activité

    Informations forums :
    Inscription : Novembre 2011
    Messages : 505
    Points : 926
    Points
    926
    Par défaut
    Citation Envoyé par fdesl Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def MaFct(toto,titi) :
     titi = toto + 1
    et dans mon programme principal quand je lance MaFct(a,b), b serait modifié.
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def fct1(x, y):
        y=x+1
     
    x=y=1
    fct1(x, y)
    print(x, y)
     
    >>> 
    1 1
    >>>
    Ici x et y (comme paramètres) sont internes à la fonction (dès que la fonction est quittée, elles disparaissent).

    Pour que l'une des variables soit modifiée dans le programme principal:
    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
    def fct2(a):
        global b
        b = a + 1
    a=b=1
    fct2(a)
    print(a, b)
     
    def fct3(a, b):
        b = a + 1
        return b
    a=b=1
    b = fct3(a, b)
    print(a, b)
     
    >>> 
    1 2
    1 2
    >>>
    Ce sont deux manières pour que la variable du programme principal soit modifiée.

    Clodion

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique

    Informations forums :
    Inscription : Septembre 2015
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    Merci à vous deux!

    Alors je ne peux pas utiliser le return, du coup si je comprend bien ta première solution Clodion, le global b irait "prendre" la valeur b dans le prog principal.
    Désolé je n'ai pas de quoi tester sous la main tout de suite mais merci beaucoup!

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    C'est aussi une histoire d'objets mutables ou pas.
    Ecrivez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> def f(a, b):
    ...     b[0] += a
    ...
    >>> a = 1
    >>> b = [1]
    >>> f(a, b)
    >>> b
    [2]
    >>>
    On ne modifie plus "b", mais son contenu.

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

  6. #6
    Membre éprouvé
    Homme Profil pro
    Aucune activité
    Inscrit en
    Novembre 2011
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Aucune activité

    Informations forums :
    Inscription : Novembre 2011
    Messages : 505
    Points : 926
    Points
    926
    Par défaut
    Citation Envoyé par fdesl Voir le message
    du coup si je comprend bien ta première solution Clodion, le global b irait "prendre" la valeur b dans le prog principal.
    Bonsoir,
    pour chaque fonction il y a un dictionnaire contenant, en particulier, les variables de la fonction.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> def f(x=5):
    	print(locals())
     
     
    >>> f()
    {'x': 5}
    >>> f(3)
    {'x': 3}
    >>>
    Ici, la fonction "locals" renvoie toutes les variables avec leurs valeurs. Ce dictionnaire est détruit à la sortie de la fonction!

    Si une variable est déclarée à l'extérieur de la fonction, elle est accessible(*) en lecture dans la fonction. Par contre, elle ne peut être modifiée qu'avec la déclaration "global".
    Si une variable de même nom est déclarée dans la fonction, c'est cette nouvelle variable qui sera traitée. À la sortie, elle disparaîtra. Et l'ancienne variable (déclarée avant d'entrer dans la fonction) aura conservé sa propre valeur.
    * Ainsi que l'a souligné wiztricks, ce qui précède est valable tant que la variable est immuable (non-mutable). C'est le cas des chaînes, tuple, variables numériques simples…
    Et ainsi que wizricks l'a indiqué, dans le cas de variables mutables, le contenu de la variable est modifiable de n'importe quel endroit.

    C'est un problème très important en Python.
    Il faut bien arriver à comprendre la page décrit le fonctionnement de ces différents types de variables.

    Clodion
    PS: pour bien comprendre les différences, la fonction "id" est très pertinente (c'est l'adresse mémoire de n'importe quel objet, dont les variables).

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique

    Informations forums :
    Inscription : Septembre 2015
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    Bonjour!

    Après test, la solution global n'est pas optimale dans mon utilisation car il faut spécifier une variable en particulier lors de la rédaction de la fonction ce qui empêchera en contrepartie d'effectuer le même traitement à une autre variable.
    Dans l'exemple on ne pourra modifier que la variable b et jamais une variable c.

    Merci en tout cas!

  8. #8
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Et qu'est-ce qui t'empêche d'utiliser return ? C'est une contrainte pour l'exercice ?

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par fdesl Voir le message
    Après test, la solution global n'est pas optimale dans mon utilisation car il faut spécifier une variable en particulier lors de la rédaction de la fonction ce qui empêchera en contrepartie d'effectuer le même traitement à une autre variable.
    Dans l'exemple on ne pourra modifier que la variable b et jamais une variable c.
    Techniquement, on peut faire cela ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> def f(a, name):
    ...     globals()[name] += a
    ...
    >>> a = 1
    >>> b = 2
    >>> f(a, 'b')
    >>> b
    3
    >>>
    mais en dehors d'un exercice montrant que vous avez assimilé je ne sais trop quelle notion, ce n'est pas recommandable.
    Comme pas grand monde n'a pu suivre le même cours que vous, impossible de savoir quelle notion utiliser pour résoudre votre problème de la façon attendue.
    Et si ce n'est pas dans le cadre d'un exercice, "return" est la solution à utiliser.

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

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique

    Informations forums :
    Inscription : Septembre 2015
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    Désolé pour le reatrd mais merci beaucoup pour votre aide!
    Et ce n'est pas pour un exercice mais pour le boulot

Discussions similaires

  1. question sur les fonctions passées à GLUT
    Par Plomeg dans le forum GLUT
    Réponses: 3
    Dernier message: 09/02/2008, 13h58
  2. Diverses questions sur les fonctions de conversion
    Par Louis-Guillaume Morand dans le forum Access
    Réponses: 12
    Dernier message: 27/12/2006, 10h56
  3. Question sur les fonctions ORACLE
    Par Fakhry dans le forum SQL
    Réponses: 8
    Dernier message: 12/12/2006, 17h13
  4. [Dates] Question sur les fonctions Date
    Par cerede2000 dans le forum Langage
    Réponses: 2
    Dernier message: 28/10/2006, 17h26
  5. Question sur les fonctions "send()" et "recv(
    Par damien99 dans le forum MFC
    Réponses: 6
    Dernier message: 10/02/2006, 20h47

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