ubuntuusers.de

Python Standard-Module beim Programmstart

Status: Ungelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

ak01

Anmeldungsdatum:
15. Januar 2007

Beiträge: 89

Hallo liebe Gemeinde!

Ich bin gerade ganz frisch beim Python lernen und gerade dabei das Wesen der Module zu verstehen. 😉

Zu meiner Frage: Wenn ich ein frisches Programm anfange kann ich ja mit dir() mir anzeigen lassen welche Module und Variablen gerade verwendet werden. Wenn ich keine weiteren Variablen angegeben habe dürfte das zu Beginn nur

1
2
dir()
['__builtins__', '__doc__', '__name__', '__package__']

sein.

Wie muss ich das nun verstehen? Sind das jetzt wiederum 4 Module die automatisch mittels "import" beim Start automatisch importiert wurden? Wenn ich nun z.B. __name__ eingebe bekomm ich ja ne Ausgabe zurück (in dem Fall __main__ z.B.), also müsste dann doch dieses Modul __name__ mittels from __name__ import * importiert worden sein, weil man ja sonst nach dem Import beim einfachen Eingeben des Modulnamens nur eine Ausgabe wie z.B. <module 'sys' (built-in)> erhält? Also das Modul wird nur angezeigt, jedoch nicht ausgeführt oder? Aber wenn es auf diesem Wege mit from...import * importiert worden wäre, dann müssten ja auch alle anderen Variablen die in diesem Modul drin sind mit importiert werden, was ja nicht der Fall ist. Wobei handelt es sich nun bei diesen 4 Modulen?

Schon einmal vielen Dank für Hilfe!

PS: wenn ein Wort unterstrichen ist dann soll das eigentlich zwei Unterstriche davor und dahinter haben, wie z.B. bei __name__, keine Ahnung wie ich das hier im Forum umstellen kann.

Bearbeitet von Marc 'BlackJack' Rintsch:

Das Problem mit den Unterstrichen behoben.

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4694

Wohnort: Berlin

@ak01: Schau noch mal in den Quelltext von Deinem Beitrag, wie man das mit den Unterstrichen machen kann, damit man die sieht und sie vom Forum nicht als Formatierungsanweisung interpretiert werden.

Ansonsten verstehe ich Deine Frage nicht so ganz. Du siehst da vier Namen, die in jedem Modul am Anfang im Namensraum existieren. Nur einer davon ist an ein Modul gebunden, und das ist __builtins__. Der Name ist an das __builtin__-Modul gebunden, in dem als letzte Möglichkeit nachgeschaut wird, wenn ein Name nicht aufgelöst werden kann. Da sind die Dinge drin, die global überall verfügbar sind.

__doc__ ist an den Docstring im Modul gebunden, oder an None, falls das Modul keinen Docstring hat. __name__ an den Namen des Moduls, mit der Besonderheit, dass der grundsätzlich '__main__' lautet, wenn das Modul nicht über import geladen wurde, sondern direkt ausgeführt wird. Statt __package__, was an den Paketnamen gebunden sein dürfte, habe ich bei mir allerdings __file__, das an den Dateinamen des Moduls gebunden ist.

Diese Attribute werden beim Importieren von Python gesetzt.

ak01

(Themenstarter)

Anmeldungsdatum:
15. Januar 2007

Beiträge: 89

Danke für den Tipp mit den Unterstrichen!

Also diese vier Namen sind jetzt keine eigenen Module? Sind es dann automatisch geladene Funktionen oder vordefinierte Variablen?

Gibt es denn auch einen Befehl wie dir() welcher mir getrennt Funktionen, Variablen und Module darstellt?

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4694

Wohnort: Berlin

@ak01: An was die einzelnen Namen gebunden sind, habe ich doch geschrieben!?

Extra dir()-Varianten gibt es nicht, aber Du kannst var() benutzen und Dir selber einen Filter schreiben, der dir bestimmte Typen aussortiert. Dabei könnten ismodule() und isfunction() aus dem inspect-Modul helfen. Aber so zuverlässig ist das alles nicht, weil ein Exemplar einer Klasse, die __call__() implementiert zwar keine Funktion ist, sich aber wie eine verhält. Dafür gibt es Fabrikfunktionen, die sich eher wie eine Klasse verhalten, nur dass man halt nicht von ihnen erben kann, usw.

Es gibt halt Module, in denen gibt es Namen und diese Namen sind an Objekte gebunden. Welchen Typ die haben, und welche Attribute sie zur Verfügung stellen, kann man mit type() und dir() bzw. vars() herausfinden. Wenn die Objekte mit Docstrings versehen sind, ist help() auch manchmal erhellend. Das alles befreit einen allerdings nicht davon, auch mal die Dokumentation zu Rate zu ziehen.

ak01

(Themenstarter)

Anmeldungsdatum:
15. Januar 2007

Beiträge: 89

Ok, ich werd mich erstmal noch etwas weiter belesen und paar Tutorials durchgehen. Trotzdem Danke für die Informationen, ist jetzt alles etwas klarer geworden!

Antworten |