14 svar
207 visningar
Qetsiyah 6567 – Livehjälpare
Postad: 2 dec 2020 01:05 Redigerad: 2 dec 2020 01:06

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å?

Skaft 2373 – F.d. Moderator
Postad: 2 dec 2020 07:44

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

Lindehaven 820 – Lärare
Postad: 2 dec 2020 09:48 Redigerad: 2 dec 2020 09:48

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()
Qetsiyah 6567 – Livehjälpare
Postad: 2 dec 2020 09:51

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?

Lindehaven 820 – Lärare
Postad: 2 dec 2020 10:51

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 504 – Fd. Medlem
Postad: 2 dec 2020 14:58

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

Qetsiyah 6567 – Livehjälpare
Postad: 2 dec 2020 15:49

Vad tycker ni om min lösning?

Lindehaven 820 – Lärare
Postad: 3 dec 2020 14:13

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

Qetsiyah 6567 – Livehjälpare
Postad: 3 dec 2020 14:15 Redigerad: 3 dec 2020 14:18

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.

Lindehaven 820 – Lärare
Postad: 3 dec 2020 14:22
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 6567 – Livehjälpare
Postad: 3 dec 2020 14:25 Redigerad: 3 dec 2020 14:29

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.

Smutstvätt 25070 – Moderator
Postad: 3 dec 2020 16:19

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 6567 – Livehjälpare
Postad: 3 dec 2020 16:53 Redigerad: 3 dec 2020 16:59

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.

Smutstvätt 25070 – Moderator
Postad: 3 dec 2020 18:43

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

Qetsiyah 6567 – Livehjälpare
Postad: 3 dec 2020 20:05
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
Close