2015-07-11 14 views
8

Oto pseudokod pisałem opisując mój problem: -Jak zmutować listę za pomocą funkcji w python?

func(s): 
    #returns a value of s 

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

Kiedy drukować wartość x w końcu, chcę to być jeden zwrócony przez func (x). Mogę zrobić coś takiego tylko poprzez edycję funkcji (i bez ustawiania x = func(x))

+0

Umyć listę, a następnie ją zwrócić. –

+0

Na przykład: "def func (s): s.append (" test "); return s' –

Odpowiedz

4
func(s): 
    s[:] = whatever after mutating 
    return s 

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

rzeczywistości nie potrzeba, aby powrócić coś:

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

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

Wszystko zależy od tego, co faktycznie robisz, dołączanie lub jakakolwiek bezpośrednia mutacja listy zostanie odzwierciedlona poza funkcją, ponieważ faktycznie zmieniasz oryginalny obiekt/listę przekazaną. Jeśli robiłeś coś, co stworzyło nowy obiekt i chciałeś ch znaki widoczne na liście przekazanej w ustawieniu s[:] =.. zmienią oryginalną listę.

+1

Dzięki ... Próbowałem, ale na początku to nie działało ..... potem użyłem zmiennej globalnej, która zadziałała: D ... dzięki –

+0

@RitvikSharma, zawartość przekazanej listy zostanie zmieniona przez cokolwiek, co jest po prawej stronie zadania –

+1

Bardzo trudno jest wyszukać coś takiego jak '[:]'. Jest to bardzo użyteczny spokój kodu. – XuMuK

7

to już jak się zachowuje, funkcja może mutować listę o

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

Należy jednak pamiętać, że nie można zmutować oryginał lista w ten sposób

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

(powyższy przydzieli x ale nie oryginalną listę l)

Jeśli chcesz umieścić nową listę na liście, trzeba coś takiego:

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

Pamiętaj, aby nie przypisywać 'x' w treści funkcji. W przeciwnym razie 'x' stanie się zmienną lokalną (obiekt w przestrzeni nazw funkcji) i" zasłoni "argument przekazany do funkcji. – werkritter

Powiązane problemy