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 :

liste modifiée?!


Sujet :

Python

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 56
    Par défaut liste modifiée?!
    Bonsoir ;
    Voici un programme tres simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>>
    >>>def f(x):
                x[1],x[0]=x[0],x[1]
                return   x[0]
    >>>
    maintenant j'ecris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>>
    >>>l=['a','b']
    >>> q=f(l)
    >>> print l
    ['b', 'a']
    >>>
    et la je me demande pourquoi la liste l a-t-elle change?
    merci d'avance.

  2. #2
    Membre émérite
    Avatar de parp1
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    829
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Mai 2005
    Messages : 829
    Par défaut
    Ba c'est tout simple!
    Tu dis toi meme dans ta fonction que tu mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     x[1]=x[2]
    et x[2] =x[1]
    Comprends tu ?

    En python si tu mets
    a=2
    b=3
    a=b

    Tu remplaces a par la valeur de b.

    Si tu remplace une valeurs alors q'une valeur en depends alors la valeur dependante changera.

    Si tu veut palier a ce soucis...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def f(x):
                y=x
                y[1],y[0]=y[0],y[1]
                return   y[0]
    
    [SIZE="2"]Dis moi qui tu suis, je te dirais qui je Hais!
    Heureux est l'étudiant, qui comme la rivière suit son cours sans sortir de son lit

    Mon premier Tutoriel


    A 80% des cas je résouts mon problème en rédigeant une nouvelle discussion, du coup je ne poste que 20% de mes problèmes...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 56
    Par défaut
    mais on a pas fait appel a la fonction f ?

  4. #4
    Expert confirmé
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Saône et Loire (Bourgogne)

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

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Par défaut
    Le passage d'objet en paramètre de fonction se fait par pointeur. Donc toute action sur cet objet dans la fonction sera toujours présente une fois la fonction exécutée

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Par défaut
    En théorie les paramètres de fonctions sont des copies des variables envoyées, ce n'est pas le cas pour les listes, il faut faire une copie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def f(x):
        _x = x[:]
        _x[1], _x[0] = _x[0], _x[1]
        return x[0]
    P.S.: Je ne vois pas trop l'utilité de changer les éléments de place si c'est pour en renvoyer un seul

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 56
    Par défaut
    alors pourquoi on a ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    >>> def f(x,y):
       y = y + 100
       x = 0
       return y
    >>> x=11
    >>> y=2
    >>> z=1
    >>> x=f(x,z)
    >>>print x,y,z
    101    2    1
    ici la valeur de z n'a pas changé pourtant on a appelé f ?

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 56
    Par défaut
    Citation Envoyé par oiffrig
    P.S.: Je ne vois pas trop l'utilité de changer les éléments de place si c'est pour en renvoyer un seul
    C'est un exercice d'un examen ecrit (sans ordi )

  8. #8
    Expert confirmé
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Saône et Loire (Bourgogne)

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

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Par défaut
    Citation Envoyé par john491
    alors pourquoi on a ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    >>> def f(x,y):
       y = y + 100
       x = 0
       return y
    >>> x=11
    >>> y=2
    >>> z=1
    >>> x=f(x,z)
    >>>print x,y,z
    101    2    1
    ici la valeur de z n'a pas changé pourtant on a appelé f ?
    parce que z n'est pas un objet mais un nombre

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 56
    Par défaut
    donc les variables globales ne changent pas si on les definies dans un sous programmes mais les objets tels que les listes et les string changent ?

  10. #10
    Expert confirmé
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Saône et Loire (Bourgogne)

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

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Par défaut
    si ta variable est globale, la variable sera modifiée
    mais dans ta fonction, les variables sont locales
    et un string, c'est comme un nombre et ne sera donc pas modifié.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 56
    Par défaut
    merci beaucoup.
    a+

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

Discussions similaires

  1. zone de liste modifiable (NotInList)
    Par ptitdragon_eric dans le forum Access
    Réponses: 4
    Dernier message: 23/01/2006, 20h41
  2. Réponses: 2
    Dernier message: 17/02/2005, 00h00
  3. Réponses: 14
    Dernier message: 19/10/2004, 13h58
  4. Zone de liste modifiable
    Par SAUVEUR Serge dans le forum IHM
    Réponses: 3
    Dernier message: 19/09/2004, 17h58
  5. [VB6] Zone de liste modifiable basée sur un champ
    Par pepper dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 27/11/2002, 13h41

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