Python Code Grundgerüst

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
Benutzeravatar
CrisBee
User
Beiträge: 61
Registriert: Mittwoch 2. Oktober 2013, 10:45
Wohnort: Bielefeld
Kontaktdaten:

So, ein paar haben sicher schon meinen Beitrag bezüglich der GUI für einen Bildbetrachter gesehen. Da ich grundsätzliche "Probleme" mit Python habe und anfangen möchte, es von der Pike auf zu verstehen, habe ich jetzt ein paar Fragen zum grundsätzlichen Aufbau eines Python Codes. Bitte verweist mich nicht auf irgendwelche Dokus, glaubt mir, da habe ich schon einige gesehen und scheinbar nur sehr unzureichend verstanden. Versucht es mir bitte einfach zu erklären.

Ich habe hier diesen Code für die Ausführung eines Hallo Welt Programms. WAS passiert hier?

Code: Alles auswählen

#!/usr/bin/python

import os, sys

class HALLOWELT:
    def __init__(self):
        
        print "Hallo Welt"
        
def main():
    app = HALLOWELT()

if __name__ == "__main__":
    sys.exit(main())
Bitte steinigt mich nicht für so eine, von mir selbst als dumm empfundenen, Frage.

Also erstes sage ich mit der #! Zeile, dass es sich um Python Code handelt, richtig? Darauf folgt der Import von os und sys.

Das ich am Anfang eine Klasse mit dem Namen HALLOWELT erstelle, ist auch noch klar. Der def __init__(self) Teil ist mir aber schon unklar, ist das der Programmeinstieg? Ich weiß immerhin, dass der darauf folgende Code ausgeführt wird, sprich, dass "Hallo Welt" ausgegeben wird.

Was hat es mit dem app = HALLOWELT() auf sich?

sys.exit(main()) ist der Programmausstieg, wofür aber die if-Anweisung?

Was bedeuten die doppelten Unterstriche vor und nach dem name und main?

Ich hoffe es ist nicht zuviel verlangt, um eure Hilfe zu bitten und das ich irgendwann selber der Community durch Rat und Tag zur Seite stehen kann! :)
Das Reallife ist nur etwas für Leute, die keine Freunde im Internet haben! :P
Meine Fotografie: http://www.cutefeet.de
BlackJack

@CrisBee: Als Grundgerüst ist das schon zu viel. Das wäre eigentlich nur das hier für ein Programm, oder eine gänzlich leere Datei für ein Modul:

Code: Alles auswählen

#!/usr/bin/env python


def main():
    pass


if __name__ == '__main__':
    main()
Mit der ``#!``-Zeile sagt man Unix-Systemen wie diese Datei auszuführen ist. Unix startet das was da steht mit dem Dateinamen in dem das steht als Argument wenn die Datei selbst in den Dateimetadaten als ausführbar markiert ist.

Danach kommt optional ein Docstring der das Modul beschreibt und dann die Importe.

`HALLOWELT` ist ein unkonventioneller Name für eine Klasse. Zum einen ist die durchgängige Grossschreibung eigentlich für Konstanten reserviert und dann beschreiben Klassen „Dinge” im weitesten Sinne. `HalloWelt` ist aber kein Name für ein „Ding”. Die `__init__()`-Methode wird beim erstellen eines Objekts aufgerufen und initialisiert das Objekt. Das passiert wenn man das Klassenobjekt aufruft. Da solltest Du also mal ein Tutorial zu Klassen und objektorientierter Programmierung anschauen. Die Klasse macht hier überhaupt keinen Sinn.

Das ``sys.exit(main())`` macht keinen Sinn weil die `main()`-Funktion nichts explizit zurück gibt. Dann braucht man auch kein explizites `sys.exit()`.

Das ``if`` verhindert dass der Code in dem Block ausgeführt wird wenn man das Modul importiert. Denn dann ist der Name `__name__` in einem Modul immer an eine Zeichenkette mit dem Namen des Moduls gebunden, also üblicherweise der Name der `*.py`-Datei ohne die Dateiendung. Nur wenn man ein Modul direkt ausführt ist `__name__` an die Zeichenkette '__main__' gebunden. Die Unterstriche haben keine syntaktische Bedeutung, die Variable heisst halt so und der Wert hat die halt. Konventionell bedeuten die doppelten führenden + abschliessenden Unterstriche, dass das ein Name ist der etwas mit Sprache zu tun hat und in gewisser weise „magisch” ist, weil er von der Sprache für irgendetwas benutzt wird. Dass heisst wenn man einen solchen Namen sieht, dann kann man sich sicher sein, dass der irgendwo in der Python-Dokumentation erklärt wird. Darum sollte man solche Namen nicht selber vergeben, und deshalb sind die wohl auch bei `__main__` denn so wird niemand sein Modul nennen. Ausser er nennt es absichtlich so weil es in einem ``*.egg``-Archiv die auszuführende Datei markieren soll.
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

CrisBee hat geschrieben:Ich habe hier diesen Code für die Ausführung eines Hallo Welt Programms.
Prinzipiell reicht ja folgendes:

Code: Alles auswählen

print "Hallo Welt"
Grundsätzlich solltest du aber den Ausführungen von BlackJack folgen und bei Bedarf nachfragen. Das offizielle Tutorial kennst du?
Benutzeravatar
CrisBee
User
Beiträge: 61
Registriert: Mittwoch 2. Oktober 2013, 10:45
Wohnort: Bielefeld
Kontaktdaten:

Danke schonmal an euch beiden. Also ich bin sicherlich schonmal über das Tutorial gestolpert, ich bin über so viele gestolpert und dadurch nur noch mehr ins Stolpern geraten! XD

Ich hatte von Anfang an die Befürchtung, als ich diverse Tutorials las, dass ich am Ende massig Zeug falsch lernen werde...ich habe das Gefühl, Python ist stellenweise ZU gut dokumentiert oder viele dokumentieren, obwohl sie selber keine Ahnung haben. *sigh*

Ich werde mich mal strikt an das Tutorial halten @/me

Kleine Umfrage an euch beiden? Hat es überhaupt noch Zweck mit mir!? :D
Das Reallife ist nur etwas für Leute, die keine Freunde im Internet haben! :P
Meine Fotografie: http://www.cutefeet.de
Benutzeravatar
Manchotix
User
Beiträge: 54
Registriert: Samstag 14. Januar 2012, 19:54

CrisBee hat geschrieben:Kleine Umfrage an euch beiden? Hat es überhaupt noch Zweck mit mir!? :D
Hey CriseBee,
mach dir da mal keine Sorgen als ich mit Python angefangen habe bin ich auch wie du von Tutorial zu Tutorial gestolpert. :)
Aber nach einer Zeit wenn man bei einem Tutorial bleibt und das Wissen in irgend einer art verwendet dann kommt das von ganz alleine, also mach mal irgend was zur übung (ein kleines Text basiertes Spiel oder eine abfrage was es in eine txt datei speichert) und wenn es dann fragen gibt kannst du hier ja ruhig fragen.

Bleib nur am Ball ;D
- Über Fehler sollte man sich freuen als über das richtige Ergebnis denn wir Menschen können nur aus den Fehlern lernen-
Benutzeravatar
CrisBee
User
Beiträge: 61
Registriert: Mittwoch 2. Oktober 2013, 10:45
Wohnort: Bielefeld
Kontaktdaten:

Danke Machotix, ich habe diesmal auch fest vorgenommen, das Handtuch nicht zu werfen! :)
Das Reallife ist nur etwas für Leute, die keine Freunde im Internet haben! :P
Meine Fotografie: http://www.cutefeet.de
Antworten