Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1535 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  Passage d'arguments à une fonction Python

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Passage d'arguments à une fonction Python

n°1117189
bouba331
Posté le 12-06-2005 à 14:20:37  profilanswer
 

Bonjour, j'ai un problème, je veux passer une variable en argument d'une fonction Python, la fonction doit modifier cette variable, mais après l'appel de la fonction cette variable reste inchangée.
Voici le code python.  

Code :
  1. from StringStream import *
  2. class StringStream2(StringStream):
  3.    def __lshift__(self, var):
  4.       StringStream.lshift(self, var)
  5.  
  6.    def __rshift__(self, var):
  7.       var = StringStream.rshift(self, var)
  8.       print var


 
Voici l'illustration du problème dans Python  
 

Code :
  1. >>> import StringStream2
  2. >>> x=StringStream2.StringStream2()
  3. >>> x.Set('26')
  4. >>> y=0
  5. >>> x>>y
  6. 26
  7. >>> print y
  8. 0


quand je fais x >> y, la fonction __rshift__ est bien appelée et la variable var s'affiche, mais pourquoi y n'est pas modifié puisque y correspond à l'argument passé donc à var ?
 
Merci.
 
Bouba

mood
Publicité
Posté le 12-06-2005 à 14:20:37  profilanswer
 

n°1117284
dividee
Posté le 12-06-2005 à 16:32:00  profilanswer
 

C'est normal, les arguments en Python sont toujours passés par valeur, pas par référence. Les valeurs en question sont des références, mais ces références ne peuvent être changées car elles sont passées par valeur. Pour les types mutables, on peut toutefois modifier la valeur référencée, mais pour les types immutables (comme les entiers ou les strings) c'est impossible. Je crois que c'est la même chose en Java, d'ailleurs.
 
Exemple:

Code :
  1. >>> def f(x): x += 1
  2. ...
  3. >>> a = 2
  4. >>> f(a)
  5. >>> a
  6. 2
  7. >>> def g(x): x[0] += 1
  8. ...
  9. >>> b = [2]
  10. >>> g(b)
  11. >>> b
  12. [3]
  13. >>> c = 2,
  14. >>> g(c)
  15. Traceback (most recent call last):
  16.   File "<interactive input>", line 1, in ?
  17.   File "<interactive input>", line 1, in g
  18. TypeError: object does not support item assignment


Le premier exemple fonctionne mais ne fait pas ce que tu attends, car c'est une copie de la variable locale à la fonction qui est incrémentée. Le deuxième exemple fonctionne car 'list' est un type mutable. Le troisième exemple ne fonctionne pas car 'tuple' est un type immutable...


Message édité par dividee le 12-06-2005 à 16:33:13
n°1117788
bouba331
Posté le 13-06-2005 à 01:28:43  profilanswer
 

Merci, en fait j'ai donc été obligé de passer une liste à un élément au lieu d'un entier à ma fonction pour que celà marche, maintenant c'est bon.

Code :
  1. from StringStream import *
  2.    
  3.      class StringStream2(StringStream):
  4.         def __lshift__(self, var):
  5.            StringStream.lshift(self, var)
  6.        
  7.         def __rshift__(self, var):
  8.            var[0] = StringStream.rshift(self, var[0])
  9.            print var


 
Thanks.
 
Bouba


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  Passage d'arguments à une fonction Python

 

Sujets relatifs
Comment utiliser une fonction ecrite en C++ dans un projet VB ?Comment utiliser une fonction ecrite en C++ dans un projet VB ?
la fonction exp comment est elle fabriquée?[INFO] Limitations de la fonction RAND() de SQL Server
Fonction Validation Email qui ne fonctionne pas alors qu'elle devraity'a t il une fonction C qui remplace la fonction c++ string.replace?
Probleme avec fonction includeappeler une fonction javascript dans du php
aller chercher une fonction dans une autre feuille excelexecution de code par la fonction EVAL
Plus de sujets relatifs à : Passage d'arguments à une fonction Python


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR