5 svar
31 visningar
Sykey behöver inte mer hjälp
Sykey 447
Postad: Idag 17:30

Vad innebär detta __name__ == '__main__'?

Längst ner i denna koden så står det __name__ == '__main__' och det har stått så på andra sidor också men jag hittar inte förklaringen till vad det innebär. Sen så fattar jag inte inte vad legroots eller legendre egentligen gör även om just det förklaras till vänster om denna sidan men fortfarande. 

Vi hade också en uppgift där det stod så här:

  • Remember to update your __init__.py file acoordingly

Igen där förekommer de där __  __ underscores igen. Vad skulle det kunna innebära? Boken heter Numerical physics in physics with Python om någon undrar förresten.

logicbloke 14
Postad: Idag 17:46

Hej!

När man kör programmet så är det main funktion som gäller. Man testar om vi är ju i main funktion och så kör vi andra funktioner.

Om vi hade inte de sista två linjer, det inget skulle hända men vi kan ändå kalla legroots.

Att testa om vi är i main hjälper när man importerar skriptet i någon annan fil, då ska man inte oroa sig att legroots kallas onödigt eller inte med flit. För __name__ har __main__ som värde bara när skriptet körs direkt.

Hoppas att det hjälper. 

naytte 7926 – Moderator
Postad: Idag 17:49 Redigerad: Idag 17:50

Om du importerar script 1 in i script 2 kommer script 1 exekveras direkt om du inte har den boilerplate-koden i slutet. Om du kör ditt script från exempelvis kommandotolken är det därifrån den kommer börja exekvera scriptet.

Laguna Online 32171
Postad: Idag 17:54

Vad står det i boken när de använder __main__ första gången?

Vad legendre gör vet jag inte, men det är något rent matematiskt. Är det något med den som du behöver få förklarat så fråga gärna i en annan tråd.

Legendre var en matematiker. De andra funktionerna som börjar på "leg" har väl fått den delen av namnet därifrån.

Sykey 447
Postad: Idag 18:40
logicbloke skrev:

Hej!

När man kör programmet så är det main funktion som gäller. Man testar om vi är ju i main funktion och så kör vi andra funktioner.

Om vi hade inte de sista två linjer, det inget skulle hända men vi kan ändå kalla legroots.

Att testa om vi är i main hjälper när man importerar skriptet i någon annan fil, då ska man inte oroa sig att legroots kallas onödigt eller inte med flit. För __name__ har __main__ som värde bara när skriptet körs direkt.

Hoppas att det hjälper. 

Menar du då att man sparar dataresurser i och med att det inte körs gång på gång igen (speciellt i detta fall då det kan leda till att vi får fram samma rot (x=0))? Aja men det kanske är det som är svaret på frågan

Ingenting händer annars

Men det fattar jag inte för jag har kunnat (I JupyterLabs som vi använder) typ ibland bara kunnat kopiera koden och så funkar det ändå. Så det kanske handlar mer om importering då. Vänta är det det vi gör? Genom att skriva de sista raderna så får vi reda på om vi är i main funktionen eller inte?

Sen kring vad naytte sade så förstod jag i princip inget. Boilerplate kod, vad är det? Aja oavsett så är min fråga vad händer om det exekveras direkt förresten? Vad är kommandotolken också? 

Gällande vad Laguna sade så hittade jag faktiskt informationen i ett litet snippit.

Also checks to see if we're running the present file as the main program... asså jag vet inte varför... förstår ändå inte

logicbloke 14
Postad: Idag 18:52

Menar du då att man sparar dataresurser i och med att det inte körs gång på gång igen (speciellt i detta fall då det kan leda till att vi får fram samma rot (x=0))? Aja men det kanske är det som är svaret på frågan

Det är mest att man vill inte att koden körs utan att man ska vilja det. Det verkar inte att du importerar skriptet i något annat skript, så det kvittar ju. 

Så det kanske handlar mer om importering då. Vänta är det det vi gör? Genom att skriva de sista raderna så får vi reda på om vi är i main funktionen eller inte?

Precis. Du använder inte importering här (skriptet importeras någon annanstans) så det spelar egentligen ingen roll.

Importering som händer här är tvärtom. Du importerar andra moduler på början och det är inte samma sak. De som skrev legendre såg till att ingen kod körs bara för att du vill importerar deras module och använda deras funktioner. 

Hoppas du har en tydligare bild nu.

Svara
Close