Seite 1 von 1

Python Code Grundgerüst

Verfasst: Mittwoch 9. Oktober 2013, 14:02
von CrisBee
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! :)

Re: Python Code Grundgerüst

Verfasst: Mittwoch 9. Oktober 2013, 14:24
von 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.

Re: Python Code Grundgerüst

Verfasst: Mittwoch 9. Oktober 2013, 14:39
von /me
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?

Re: Python Code Grundgerüst

Verfasst: Mittwoch 9. Oktober 2013, 14:45
von CrisBee
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

Re: Python Code Grundgerüst

Verfasst: Mittwoch 9. Oktober 2013, 16:03
von Manchotix
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

Re: Python Code Grundgerüst

Verfasst: Mittwoch 9. Oktober 2013, 16:52
von CrisBee
Danke Machotix, ich habe diesmal auch fest vorgenommen, das Handtuch nicht zu werfen! :)