4 svar
244 visningar
destiny99 behöver inte mer hjälp
destiny99 10456
Postad: 13 dec 2024 15:49 Redigerad: 13 dec 2024 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 575
Postad: 14 dec 2024 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 10456
Postad: 14 dec 2024 09:59 Redigerad: 14 dec 2024 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 575
Postad: 14 dec 2024 12:58 Redigerad: 14 dec 2024 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 10456
Postad: 14 dec 2024 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