Lisa-Baget / pyanote

Projet ISN: lecture et création de fichiers MIDI
GNU General Public License v3.0
0 stars 0 forks source link

Ca marche plus... #1

Closed Lisa-Baget closed 5 years ago

Lisa-Baget commented 5 years ago

Dans le fichier lecturemidi.py quand je remplace

sauvegarde[0] = True # mise a jour de la sauvegarde
sauvegarde[1] = instruction
sauvegarde[2] = canal

par

sauvegarde  = [True, instruction, canal] 

ca marche plus! Apparemment il fait plus la sauvegarde :(

phandaal commented 5 years ago

Ah Ah! Un truc sur lequel beaucoup de mes etudiants se plantent!!!

Tu as un code qui fait quelque chose comme ça:

sauv = [1]

def foo(param):
    param[0] = 2

foo(sauv)

Au debut, sauv pointe sur une liste (sa valeur n'est pas la liste, mais un pointeur sur la liste ) qui contient a. Quand j'execute foo(sauv), je cree pendant l'execution de la fonction un nouveau nom de variable, param, qui contient la valeur de sauv, c'est a dire un pointeur sur la liste. J'ai donc deux pointeurs sur une meme liste (celui de sauv, variable globale, et celui de param variable locale à a fonction). Maintenant, dans la fonction, en faisant param[0] = 2, tu remplaces le premier element de la liste pointee par param par 2. Comme c'est la meme liste pointee par `sauv, c'est aussi modifié pour sauv. A la fin de l'execution, la variable sauvcontient un pointeur sur la meme liste, qui est devenue [2].

Mais si tu veux écrire:

def foo(param):
    param = [2]

Ce n'est plus la meme chose qui se passe. Dans l'execution, je dis: la valeur de param est un pointeur sur une nouvelle liste [2]. Ca ne change pas la valeur de sauv qui est un pointeur sur l'ancienne liste [1]. Et a la fin de l'execution, sauv n'a pas changé. C'est pour ça que tu dis que ça ne fait plus la sauvegarde.

Mais si tu veux quand même écrire le code en une ligne, tu peu écrire (avec ton exemple):

sauvegarde[0:3] = [True, instruction, canal]

qui dit de remplacer les elements de la liste pointee par sauvegarde entre les positions 0 (inclus) et 3 (exclus) par ceux de la liste [True, instruction, canal] et ça fera bien ce que tu veux.

Lisa-Baget commented 5 years ago

Merci j'ai compris