Listes et fonctions

Pierre54k -  
yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Configuration: Windows / Firefox 80.0


J'ai ce code

def func(j):
V.append(j*2)

V = [ ] # initialisation de listes
i=2
func(i)
print(V)

qui donne V=[4]
J'aurais plutôt pensé que cela donnerait V=[ ] Puisque V est une variable globale qui ne peut être modifiée par une fonction

Par contre

def func(j):
A=[ ]
A.append(j*2)

V = [ ] # initialisation de listes
i=2
func(i)
print(V)

donne bien V=[ ] Et là je retrouve ce que j'ai appris sur variables locales/globales

Si vous pouvez m'expliquer.., je vous en serait reconnaissant

3 réponses

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour,
    si tu pouvais utiliser les balises de code, nous t'en serions reconnaissants: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      je pense que tu dois continuer à étudier et à comprendre.
      un exemple un peu plus compliqué:
      def f(): 
          s = "I love London!"
          L.append("I love London!")
          print("dans la fonction: ",s,L) 
      
      s = "I love Paris"
      L=["I love Paris"]
      f()
      print("après la fonction: ",s,L)
      0
      1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        ou ceci:
        def f(): 
            s = "I love London!"
            V.append("I love London!")
            L = [ "I love London"]
            print("s dans la fonction: ",s)
            print("L dans la fonction: ",L)
            print("V dans la fonction: ",V)
        
        s = "I love Paris"
        V=["I love Paris"]
        L = [ "I love Paris"]
        print("s avant la fonction: ",s)
        print("L avant la fonction: ",L)
        print("V avant la fonction: ",V)
        f()
        print("s après la fonction: ",s)
        print("L après la fonction: ",L)
        0
  2. Pierre54k
     
    Rebonjour,
    J'ai modifié comme demandé
    Configuration: Windows / Firefox 80.0

    J'ai ce code

    def func(j):
    V.append(j*2)
    
    V = [ ] # initialisation de listes
    i=2
    func(i)
    print(V)
    


    qui donne V=[4]
    J'aurais plutôt pensé que cela donnerait V=[ ] Puisque V est une variable globale qui ne peut être modifiée par une fonction

    Par contre

    def func(j):
    A=[ ]
    A.append(j*2)
    
    V = [ ] # initialisation de listes
    i=2
    func(i)
    print(V)


    donne bien V=[ ] Et là je retrouve ce que j'ai appris sur variables locales/globales

    Si vous pouvez m'expliquer.., je vous en serait reconnaissant
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      V n'est pas modifiée par la fonction. Son contenu est modifié, cependant.
      0
  3. Pierre54k
     
    Si dans une fonction on applique une méthode à un objet paramètre, le paramètre est "modifié"
    tandis que si on attribue une valeur à l'objet, c'est modifié en local dans le corps de la fonction
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      peux-tu alors marquer la discussion comme résolue?
      0