4 svar
80 visningar
destiny99 behöver inte mer hjälp
destiny99 Online 8065
Postad: 13 dec 15:49 Redigerad: 13 dec 15:52

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

thedifference 409
Postad: 14 dec 00:57

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() 
destiny99 Online 8065
Postad: 14 dec 09:59 Redigerad: 14 dec 10:01
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?

thedifference 409
Postad: 14 dec 12:58 Redigerad: 14 dec 13:00

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.

destiny99 Online 8065
Postad: 14 dec 16:53
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!

Svara
Close