Seite 2 von 2

Re: Kurze Frage zur Effizienz eines Snippets (for-Loops...)

Verfasst: Montag 26. Oktober 2020, 17:43
von greetings1
Ist dieses Wörterbuch als globale Variable/Konstante sinnvoll?

Code: Alles auswählen

my_const = {
    "sol_dist": 450,
    "sta_dist": 5000,
    "sys_dist": 20,
    "min_supply": 5000,
    "max_buy": 100000,
    "max_age": 48,
    "loops_threshold": 10000,
}
Ich hab alle "magischen Werte" durch my_const[...]-Aufrufe ersetzt. Macht man das so in Python?

Re: Kurze Frage zur Effizienz eines Snippets (for-Loops...)

Verfasst: Montag 26. Oktober 2020, 18:04
von Sirius3
Nein, das macht man nicht, Konstanten werden einfach nur KOMPLETT_GROSS geschrieben. Abkürzungen benutzt man nicht. Was hat der Abstand zur Sonne oder zu einem Stern mit dem Problem zu tun?

Code: Alles auswählen

SOL_DISTANCE = 450
STAR_DISTANCE = 5000
SYSTEM_DISTANCE = 20
MINIMUM_SUPPLY = 5000
MAX_BUY = 100000
MAX_AGE = 48
LOOPS_THRESHOLD = 10000

Re: Kurze Frage zur Effizienz eines Snippets (for-Loops...)

Verfasst: Dienstag 27. Oktober 2020, 10:33
von greetings1
Hat mit der Filterung der Eingabedatenmenge zu tun.

Re: Kurze Frage zur Effizienz eines Snippets (for-Loops...)

Verfasst: Montag 14. Dezember 2020, 17:49
von greetings1
Habe jetzt auf "global" komplett verzichtet und das so gemacht:

Code: Alles auswählen

import json
import csv
import math
import os
import psutil
import inspect
from datetime import datetime


class MyData:
    timestamp = datetime.timestamp(datetime.now())
    my_const = {
        "sol_dist": 300,
        "sta_dist": 5000,
        "sys_dist": 30,
        "min_supply": 5000,
        "max_buy": 100000,
        "max_age": 48,
        "loops_threshold": 30000,
        ## 10000
    }
    systems: list = []
    systems_dic: dict = {}
    stats: list = []
    stats_dic: dict = {}
    listings: list = []
    listings_dic: dict = {}
    coms: list = []
    coms_dic: dict = {}


md = MyData()


def ...


parse_systems(md)
parse_stats(md)
parse_listings(md)
parse_coms(md)
calc_1(md)
Also jede Funktion wird mit dem "md"-Objekt aufgerufen, und dieses hält einerseits die Konstanten und auch die Daten. Ist das besser so? Bei Bedarf kann ich auch den gesamten Code posten (ca. 300 Zeilen...)

Vielen Dank

Re: Kurze Frage zur Effizienz eines Snippets (for-Loops...)

Verfasst: Montag 14. Dezember 2020, 18:09
von Sirius3
Die Klasse ist kompletter Quatsch. Du hast zwar nicht global benutzt, aber doch nur eine Menge globaler Variablen in einen Klassenkontext gepackt. Die Typ-Annotationen sind mal wieder überflüssig, weil der Typ der Variablen aus der Initialisierung klar ist.
MyData ist das My-Präfix unnötig, weil nichtssagend. md ist dann komplett nichtssagend. Benutze keine Abkürzungen. Und da Du keinen sprechenden Namen finden wirst, ist das schon ein Anzeichen dafür, dass das Datendesign schlecht ist.

Re: Kurze Frage zur Effizienz eines Snippets (for-Loops...)

Verfasst: Montag 14. Dezember 2020, 19:40
von greetings1
Wie soll es denn anders gehen? Die Funktionen brauchen eine Menge an Daten, auf denen sie operieren und die sie verändern...

Re: Kurze Frage zur Effizienz eines Snippets (for-Loops...)

Verfasst: Montag 14. Dezember 2020, 20:19
von __blackjack__
@greetings1: Die sollten weniger verändern. `parse_*()`-Funktionen die gar nichts zum Parsen übergeben bekommen, aber viele leere Datenstrukturen sind schon mal sehr komisch. Eine Funktion die Daten parst bekommst üblicherweise einen Dateinamen übergeben und liefert eine *neue* Datenstruktur mit den geparsten Daten als Rückgabewert.

Das die Daten alle als Pärchen von Wörterbuch und Liste daherkommen ist auch komisch. Falls die Zusammengehören und da Invarianten bestehen, dann wäre *das* zum Beispiel ein Kandidat für eine Klasse. Also eine echte, von der auch Exemplare erstellt und verwendet werden, statt sie nur als globalen Namensraum zu missbrauchen. Auf Klassenebene gehören in der Regel nur Konstanten. Eben weil das sonst globale Variablen wären.