14 svar
143 visningar
Qetsiyah Online 4913 – Volontär digitala räknestugor
Postad: 2 dec 2020 Redigerad: 2 dec 2020

Undvika globala variabler

Hej, se reader.py i mitt projekt.

Jag får inte ha mitt dataframe ute i globala scopet, men hur ska jag göra det? Om jag utför alla mina modifikationer med funktioner som returnar dataframen måste jag lägga funktionerna i varandra så att något alltid pekar på dataframen, annars raderas dataframen från minnet.

Till exempel, hur ska jag göra med inläsningen, det händer allra först. Jag kan stoppa in det i en funktion som returnerar dataframen, men sen då?

Ofta har man en mainfunktion som sköter programflödet. Därifrån kan du kalla de andra funktionerna i tur och ordning. 

Lindehaven 634 – Leg. Lärare
Postad: 2 dec 2020 Redigerad: 2 dec 2020

Som Skaft skrev så har man ofta något som liknar nedanstående exempel. Det underlättar återanvändning av funktionerna från andra moduler samt undvikandet av globala variabler.

def first_function(df):
    return list(set(df))

def second_function(df):
    return sorted(df)

def main():
    dataframe = [3, 2, 3, 1, 3, 1]
    dataframe = first_function(dataframe)
    dataframe = second_function(dataframe)
    print(dataframe)

if __name__ == "__main__":
    main()

Men nu har jag två moduler, så 

if __name__ == "__main__": main()

Kommer inte funka. Kan jag bara ha ett main() anrop fritt i globala scopet?

Det är vanligt att man använder namnet main på funktionen där det huvudsakliga programflödet styrs, men du kan använda ett annat namn om du vill. Du kan ha flera main() men endast en i varje modul. Vill du anropa en viss funktion i en viss modul behöver du importera modulen och ange funktionen med punktnotation, d v s modulnamn.funktionsnamn(), exvis:

import reader
reader.main()
Aerius 510
Postad: 2 dec 2020

Hämtain det du behöver från modul B till modul A och kör modul A som vanligt.

Vad tycker ni om min lösning?

Du behöver visa koden eller länken till koden.

Qetsiyah Online 4913 – Volontär digitala räknestugor
Postad: 3 dec 2020 Redigerad: 3 dec 2020

Jag har PMat länken till dig.

Det som har hänt är alltså att jag har slagit ihop modulerna och gjort en if name ==main: som du föreslog.

Qetsiyah skrev:

Jag har PMat länken till dig

Ja, men det är fler i detta forum som ska få se och hjälpa till. Så är reglerna och du fick veta det av Smaragdalena i en annan tråd.

Qetsiyah Online 4913 – Volontär digitala räknestugor
Postad: 3 dec 2020 Redigerad: 3 dec 2020

Ni som brukar/vill hjälpa mig har jag gett länken till, jag vill inte lägga ut den fritt eftersom uppgiften också är lite privat, som du kan förstå av vad den handlar om.

Alla frågor ska tas via det publika forumet. Om det krävs kod (eller en länk till exempelvis github) för att andra användare ska kunna ge dig hjälp, ska detta skrivas i ett inlägg i tråden. Om du inte vill ge ut koden publikt, kan vi flytta tråden till papperskorgen. Det kommer inte att accepteras att kod/länk skickas via PM. Pluggakutens regler säger tydligt att all hjälp ska ske via det publika forumet, se regel 1.10. /Smutstvätt, moderator 

Qetsiyah Online 4913 – Volontär digitala räknestugor
Postad: 3 dec 2020 Redigerad: 3 dec 2020

Jag vill inte få hjälp någon annanstans än i pluggakuten, på vilket sätt tolkar du att jag vill ha det någon annanstans? 

Jag ser inte hur det är ett regelbrott att inte lägga ut koden publikt, hjälpen får jag som sagt fortfarande i pluggakuten. Respektera min integritet tack.

Länken jag talar om är till Github, inte ett annat forum.

Om frågan i din tråd kräver att en länk skickas via PM, innebär det att hjälpen delvis sker utanför det publika forumet, vilket regel 1.10 förbjuder. Det har ingenting med integritet att göra, utan handlar enbart om var hjälp/information om frågan ges. Om du inte vill visa koden publikt genom en länk till exempelvis Github, alternativt genom ett inlägg i tråden, flyttar vi tråden till papperskorgen, så behöver du inte dela din kod publikt. 

Att Pluggakutens regler kräver att all hjälp samt information om en fråga ska ske via det publika forumet beror på att detta minskar risken för fusk, samt att Pluggakutens trådar fungerar som en kunskapsbas för framtida personer med liknande frågor. 

/moderator

Smutstvätt skrev:

 [...] hjälp/information om frågan ges [...]

Definiera hjälp och information. Olika saker, som du märker.

Nå, jag vill inte ha någon hjälp mer.

Om någon mot förmodan hittar denna tråd i framtiden ger jag gladeligen länken till de också, om de inte uppenbart är spamkonton. Värnar du om pluggakutens användbarhet eller är ditt mål något annat? Idén om pluggakuten som kunskapsbank var min uppfinning för länge sen, och jag jobbar aktivt på det genom att skriva bra rubriker och jag svarar i mina egna mattetrådar i efterhand i det syftet. 

Svara Avbryt
Close