Verständnisfrage zu Tupel, Dicts, Listen etc.

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
luvlinux
User
Beiträge: 33
Registriert: Donnerstag 24. August 2017, 08:53

Hallo zusammen,

ich bin Programmiereinsteiger beschäftige mich seit ca. 2-3 Wochen intensiv mit Python und Django (möchte auch dabei bleiben) und hab schon einiges an Tutorials hinter mich gebracht (hauptsächlich von Bucky Roberts, Thenewboston).
Dementsprechend habe ich mich mit Listen, Tupeln, dictionaries beschäftigt und dachte ich hätte es einigermaßen verstanden. Doch heute habe ich mir entpsrechend einem Vid eine Konfigurationsdatei angeschaut. Zu dieser nun meine allegmeine Frage:
Muss ich sowas verstehen oder gelingt einem das erst nach mehreren Jahren? Also was ich mich frage ist warum sind in folgendem Django-Settings

Code: Alles auswählen

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
 ...,
]
das Ganze als Liste gegliedert, in dem folgenden

Code: Alles auswählen

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}
als dictionary (ich hoffe ich liege mit dem Ausdruck richtig) und in folgendem dann aus einem Mix aus Liste/Dictionary (eckige und geschweifte Klammern)

Code: Alles auswählen

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
 ...
            ],
        },
    },
]
geschrieben.

Also nochmals worauf ich hinaus will, weil ich nicht genau weiß, wie ich mich in diesem Fall weiterbilden soll:
Nehme ich solche Konfigurationsdateien bzw. deren Schreibweise einfach als gegeben oder muss ich mich hier einfach tiefer in Listen, dictionaries, tuples einarbeiten.
Oder habt ihr mir einen Hinweis auf Literatur bzw. youtube-vids wo ich mich für diese Schreibweise weiterbilden bzw. verstehen kann?

Ich hoffe ich war hier mit obigem Code nicht zu ausführlich.

Danke für Eure Hilfe,
Jonathan
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Die Django-Entwickler haben sich überlegt welche Informationen sie für die jeweiligen Werte brauchen und daraufhin die entsprechende Struktur festgelegt. In einem Fall ist das eine Liste, im anderen ein Dictionary und im dritten eine Liste aus Dictionaries.

Du solltest schon verstehen wie sich etwas zusammensetzt, aber du musst nicht unbedingt verstehen, warum die Designentscheidung des Frameworks so gefallen ist. Was dort genau anzugeben ist kannst du der Django-Dokumentation entnehmen.
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

Listen werden benutzt, um gleichartige Dinge zusammenzufassen, bei Dir also die Namen mehrere Middleware-Module. Wörterbücher werden verwendet bei strukturierte Daten, die man mit einem Schlüssel ansprechen will, also verschiedene Datenbanken, die einen Namen haben und deren Konfiguration aus Engine, Username, Passwort, etc. besteht.
Bei Templates handelt es sich wieder um beliebig viele Templates, die aber im gegensatz zu Middleware nicht nur einen Namen sondern mehr Information brauchen.

Kurz, je nachdem welche Information ich speichern will, benutze ich Listen oder Wörterbücher. Was davon, ergibt sich eigentlich immer aus der Art der Information. Und wenn sich der Entwickler für eine Art entschieden hat, muß sich natürlich der Anwender daran halten.
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

Zum lernen kann es gut sein, Dinge aus verschiedenen Blickwinkeln erläutert zu bekommen. Hier noch einer:

In Python gibt es kein fest vorgegebenes Format für Konfigurationsdateien. Im speziellen Fall der Django-Konfiguration besteht die Konfiguration aus Python-Code. Konkret dem Binden von Datenstrukturen an Namen. Je nach dem, was zu konfigurieren ist, haben die Django-Entwickler eine passende Struktur gewählt. Also Listen oder Dictionaries oder geeignete Kombinationen.

Für Dich wäre es daher sinnvoll, zunächst mit den Python-Datenstrukturen vertraut zu werden.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Wörterbücher sind hilfreich, wenn man eine Objektsammlung sinnvoll zu benannten Gruppen aufteilen kann. Wenn du also weißt, dass du dies und das in verschiedene Kategorien stecken kannst, dann nimm ein Wörterbuch. Auch eignen sich Wörterbücher gut für den eigentlichen Wortsinn: Übersetzungen. Zum Beispiel weil du eine ID einem Objekt zuordnen möchtest und das Objekt dann über die ID finden willst.

Und Wörterbücher sind in ihrer Anwendung oft aussagekräftiger: templates['default']['color'] versteht man halt viel besser als templates[0][3], wenn man an die Farbe des Default-Templates kommen will (nur so als komplett ausgedachtes Beispiel).
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

luvlinux hat geschrieben:Oder habt ihr mir einen Hinweis auf Literatur bzw. youtube-vids wo ich mich für diese Schreibweise weiterbilden bzw. verstehen kann?
Geht es dir darum, dass sich dir die Bedeutung der geschweiften und eckigen Klammern nicht gleich erschließt? Das ist Übungssache. Gerade bei mehrfach verschachtelten Strukturen mag es anfangs mühselig sein, aber das Verständnis kommt mit der Zeit.
luvlinux
User
Beiträge: 33
Registriert: Donnerstag 24. August 2017, 08:53

Vielen Dank für Eure Antworten, die mir insgesamt sehr weitergeholfen bzw. mein Verständnis deutlich verbessert haben.

Und @snafu:
Ja, auch die Bedeutung der eckigen und geschweiften Klammern bzw. deren Verschachtelung hat mich eher irritiert. Aber ich bin ja jetzt beruhigt, dass sich das mit der Zeit legen wird und ich auch bei den Verschachtelungen bald mehr durchblicken werde :-)

Wünsche noch einen schönen Sonntagnachmittag.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Also mehr als den Hinweis, dass eine Liste durch eine öffnende eckige Klammer eingeleitet und durch eine schließende eckige Klammer abgeschlossen wird und dass dazwischen ihr Inhalt steht, gibt es rein von der Syntax nicht zu sagen. Höchstens noch dass der Zugriff ebenfalls über eckige Klammmern passiert und zwar mittels Ganzzahl als Index oder mittels Slicing. Letzteres gibt dir kein einzelnes Element zurück, sondern einen Ausschnitt, der ebenfalls eine Liste ist (vergleichbar mit subList() aus Java, wobei in Python Veränderung an dem Ausschnitt keinen Einfluss auf die ursprüngliche Liste haben). Steht aber auch in jedem Python-Tutorial...
Antworten