web-dev-qa-db-fra.com

python: comment changer la valeur du paramètre d'entrée de la fonction?

J'ai essayé de modifier la valeur d'une chaîne à l'intérieur d'une fonction, comme ci-dessous:

>>> def appendFlag(target, value):
...     target += value
...     target += " "
...
>>> appendFlag
<function appendFlag at 0x102933398>
>>> appendFlag(m,"ok")
>>> m
''

Eh bien, il semble que la "cible" ne soit modifiée qu'au sein de la fonction, mais comment rendre la nouvelle valeur viable en dehors de la fonction? Merci.

4
Hind Forsum

Ceci est géré dans python en retournant.

def appendFlag(target, value):
   target += value
   target += " "
   return target

vous pouvez l'utiliser comme ceci:

m = appendFlag(m,"ok")

vous pouvez même renvoyer plusieurs variables comme celle-ci:

def f(a,b):
   a += 1
   b += 1
   return a,b

et utilisez-le comme ceci:

a,b = f(4,5)
5
Christian Sloper

Vous devez utiliser un objet qui peut être modifié

>>> m = []
>>> def appendFlag(target, value):
...     target.append(value)
...     target.append(" ")
...
>>> appendFlag(m, "ok")
>>> m
['ok', ' ']
2
Kylejie

Votre fonction doit renvoyer la nouvelle valeur. La variable target n'a de portée que dans la fonction appendFlag.

def appendFlag(target, value):
   ...
   return target

m = appendFlag(m, "ok")
1
dwagon

Pour que la valeur de m soit mise à jour, vous devez return la valeur concaténée et l'affecter à la variable m:

def appendFlag(target, value):
    target += value
    target += " "
    return  target

print(appendFlag)
m = "hey"
m = appendFlag(m,"ok")
print(m)

SORTIE :

<function appendFlag at 0x000001423C99F268>
heyok 
1
DirtyBit

les variables à l'intérieur de la fonction n'ont que la portée de la fonction, si vous changez la valeur de la variable de l'intérieur de la fonction, elle ne se reflétera pas à l'extérieur de la fonction. si vous voulez changer la valeur de la variable globale m, mettez-la à jour depuis l'extérieur de la fonction comme suit

 `def a(target, value):
        target += value
        target += " "
        return target
  m=''
  m=a(m,'ok')

"

1
Agus Mathew