Voici un pseudocode que j'ai écrit décrivant mon problème: -

func(s):
   #returns a value of s

x = a list of strings
print func(x)
print x #these two should give the SAME output

Quand j'imprime la valeur de x à la fin, je veux que ce soit celle retournée par func (x). Puis-je faire quelque chose comme ça uniquement en modifiant la fonction (et sans paramétrer x = func(x))

11
Ritvik Sharma 11 juil. 2015 à 20:06

2 réponses

Meilleure réponse
func(s):
   s[:] = whatever after mutating
   return s

x = a list of strings
print func(x)
print x

Vous n'avez pas besoin de retourner quoi que ce soit:

def func(s):
    s[:] = [1,2,3]

x = [1,2]
print func(x)
print x # -> [1,2,3]

Tout dépend de ce que vous faites réellement, l'ajout ou toute mutation directe de la liste sera reflété en dehors de la fonction car vous modifiez réellement l'objet / la liste d'origine transmis. Si vous faisiez quelque chose qui a créé un nouvel objet et que vous vouliez les changements reflétés dans la liste passée dans le paramètre s[:] =.. modifieront la liste d'origine.

8
Padraic Cunningham 11 juil. 2015 à 17:17

C'est déjà comme ça qu'elle se comporte, la fonction peut muter la liste

>>> l = ['a', 'b', 'c'] # your list of strings
>>> def add_something(x): x.append('d')
...
>>> add_something(l)
>>> l
['a', 'b', 'c', 'd']

Notez cependant que vous ne pouvez pas muter la liste d'origine de cette manière

def modify(x):
    x = ['something']

(Ce qui précède attribuera x mais pas la liste d'origine l)

Si vous souhaitez placer une nouvelle liste dans votre liste, vous aurez besoin de quelque chose comme:

def modify(x):
    x[:] = ['something'] 
8
bakkal 11 juil. 2015 à 17:25