Hur många banana objekt lever när körningen når kommenterade raden?
class Banana:
def __init__(self):
pass
def g():
v=[]
for i in range(3):
v.append((Banana()))
return
def f():
a=Banana()
b=Banana()
g()
#kommenterad rad
print("Going Bananas!")
return
f()
Hej! rätt svar är 2. Jag svarade med 3 för att jag tänkte att det läggs till tre banana objekt i tomma listan
Borde du inte i så fall ha svarat 5?
Vi tittar på g(). Listan v skickas inte som ett argument till funktionen, utan skapas där. Det kunde ha varit en curveball annars. Tre bananer läggs i v, och sen bara avslutas funktionen. Funktionen skickar inte tillbaka v, och även om den gjorde det, så sparar f() inte resultatet av g(). Listan med tre bananer bara försvinner.
Denna hade sparat listan och hållt bananerna vid liv:
class Banana:
def __init__(self):
pass
def g():
v=[]
for i in range(3):
v.append((Banana()))
return v # skickar tillbaka listan
def f():
a=Banana()
b=Banana()
lst = g() # sparar listan
#kommenterad rad
print("Going Bananas!")
return
f()
Även denna:
class Banana:
def __init__(self):
pass
def g(v):
for i in range(3):
v.append((Banana()))
return
def f():
a=Banana()
b=Banana()
v=[]
g(v)
#kommenterad rad
print("Going Bananas!")
return
f()
thedifference skrev:Borde du inte i så fall ha svarat 5?
Vi tittar på g(). Listan v skickas inte som ett argument till funktionen, utan skapas där. Det kunde ha varit en curveball annars. Tre bananer läggs i v, och sen bara avslutas funktionen. Funktionen skickar inte tillbaka v, och även om den gjorde det, så sparar f() inte resultatet av g(). Listan med tre bananer bara försvinner.
Denna hade sparat listan och hållt bananerna vid liv:
class Banana: def __init__(self): pass def g(): v=[] for i in range(3): v.append((Banana())) return v # skickar tillbaka listan def f(): a=Banana() b=Banana() lst = g() # sparar listan #kommenterad rad print("Going Bananas!") return f()
Även denna:
class Banana: def __init__(self): pass def g(v): for i in range(3): v.append((Banana())) return def f(): a=Banana() b=Banana() v=[] g(v) #kommenterad rad print("Going Bananas!") return f()
Ingen aning. Så svaret är 2 för att 3 bananaobjekt sparas ej ? Hur vet man att just 2 bananaobjekt sparas?
Vi börjar med att gå in i f(). I f() skapas två bananer och sparas i a och b. Sen som en del av f() går vi in i g(). Där läggs tre bananer i en lista, men ingen tar tillvara på den listan. När vi når den kommenterade raden har vi gått ur g() igen och listan v finns inte längre. Vi är dock kvar i f() där a och b fortfarande finns.
thedifference skrev:Vi börjar med att gå in i f(). I f() skapas två bananer och sparas i a och b. Sen som en del av f() går vi in i g(). Där läggs tre bananer i en lista, men ingen tar tillvara på den listan. När vi når den kommenterade raden har vi gått ur g() igen och listan v finns inte längre. Vi är dock kvar i f() där a och b fortfarande finns.
Jaa okej då är jag med. Tack!