Débutant python => Affectation avec virgule [RESOLU]

Débutant python => Affectation avec virgule [RESOLU] - Python - Programmation

Marsh Posté le 17-08-2007 à 22:49:23    

Bonjour à tous,
 
Je débute en Python et j'essaye de travailler avec matplotlib qui est une super librairie pour les graphes. En regardant un exemple matplotlib, j'y ai vu les lignes suivantes

Code :
  1. l0, = ax.plot(t, s0, visible=False, lw=2)
  2. l1, = ax.plot(t, s1, lw=2)
  3. l2, = ax.plot(t, s2, lw=2)


 
Ce que je ne comprends pas, ce sont les virgules avant le "=" ou plutôt je ne le comprends pas ici. J'ai bien vu que dans Python on pouvait affecter plusieurs variables simultanément comme ceci

Code :
  1. a, b, c = 1, 2, 3


Mais là, il n'y a qu'une seule variable par instruction et j'arrive pas à recaler cette écriture avec mon exemple. En tout cas j'ai essayé de l'enlever mais le programme ne fonctionne plus preuve que c'est important.
 
Si vous voulez voir le code en entier, il est ici: http://matplotlib.sourceforge.net/ [...] buttons.py
 
Merci à tous de vos réponses...


Message édité par Sve@r le 20-08-2007 à 10:38:01

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 17-08-2007 à 22:49:23   

Reply

Marsh Posté le 17-08-2007 à 22:57:06    

Ca doit être pour un tuple:
(x,y) = (1,2)
ou
x,y = (1,2)
 
Si le tuple n'a qu'une composante:
(x,) = (1,)
ou
x, = (1,)

Reply

Marsh Posté le 17-08-2007 à 23:01:19    

verdoux a écrit :

Ca doit être pour un tuple:
(x,y) = (1,2)
ou
x,y = (1,2)
 
Si le tuple n'a qu'une composante:
x, = (1,)


ou "x, = 1," sans parenthèse. Je comprends. D'ailleurs en rajoutant des parenthèses autour de chaque "l0," ça marche pareil. Mais pourquoi créer un tuple avec un seul élément ?

Message cité 1 fois
Message édité par Sve@r le 17-08-2007 à 23:02:20

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 17-08-2007 à 23:08:02    

En survolant la doc j'ai l'impression que cela retourne un n-tuple si il y a n courbes à tracer.

Reply

Marsh Posté le 18-08-2007 à 12:28:39    

Sve@r a écrit :


ou "x, = 1," sans parenthèse. Je comprends. D'ailleurs en rajoutant des parenthèses autour de chaque "l0," ça marche pareil. Mais pourquoi créer un tuple avec un seul élément ?


Comme le dit verdoux, c'est probablement parce qu'il retourne un n-tuple en fonction d'un certain paramètre (nombre de courbes à tracer, donc, d'après verdoux).

 

Ici ce paramètre est à 1, donc il retourne un 1-tuple, donc 1,

Message cité 1 fois
Message édité par masklinn le 18-08-2007 à 12:30:32

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 20-08-2007 à 10:37:04    

masklinn a écrit :


Comme le dit verdoux, c'est probablement parce qu'il retourne un n-tuple en fonction d'un certain paramètre (nombre de courbes à tracer, donc, d'après verdoux).
 
Ici ce paramètre est à 1, donc il retourne un 1-tuple, donc 1,


 
Vi, j'ai compris en faisant un essai rapide

Code :
  1. def fct(n):
  2.    return (n, n + 1)
  3.  
  4. a=fct(5)
  5. (b, c)=fct(7)
  6. print a => (5, 6)
  7. print b => 7
  8. print c => 8


 
J'imagine que si j'avais écrit "d,=fct(9)" j'aurais eu 9 dans "d" et non (9, 10) mais pour moi qui vient du C, c'est déroutant cette possibilité de gérer et renvoyer des objets aussi facilement que de simples nombres... mais je vais m'y habituer

Message cité 1 fois
Message édité par Sve@r le 20-08-2007 à 10:37:31

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 20-08-2007 à 10:54:43    

Sve@r a écrit :


 
Vi, j'ai compris en faisant un essai rapide

Code :
  1. def fct(n):
  2.    return (n, n + 1)
  3.  
  4. a=fct(5)
  5. (b, c)=fct(7)
  6. print a => (5, 6)
  7. print b => 7
  8. print c => 8


 
J'imagine que si j'avais écrit "d,=fct(9)" j'aurais eu 9 dans "d" et non (9, 10)


Non, t'aurais eu une erreur:
 

  • En lvalue tu aurais (d,), donc un 1-tuple
  • En rvalue, tu aurais (9, 10), donc un 2-tuple (ou pair)


Python aurait tenté d'unpacker un 2-tuple dans un 1-tuple, et n'aurait pas réussi (normal) et aurait gueulé que ValueError: too many values to unpack
 
On ne peut unpacker un n-tuple que dans un autre n-tuple avec n égaux ;)


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed