Wie sollte man Importieren?

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
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Letztens war irgendwann auf der django-dev die Diskussion über das importieren. In django wir super oft "from package.module import Foo, bar" gemacht. Bei google gibt es wohl den internen Styleguide nach die Regel, das maximal ein Modul importiert werden sollte.

In PEP-8 gibt es auch den Punkt "Imports". Demnach kann man ruhig beides nutzten.

Wie handhabt ihr das bzw. wie meinst ihr sollte es gemacht werden?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
Michael Schneider
User
Beiträge: 569
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Brandenburg

jens hat geschrieben:Wie handhabt ihr das bzw. wie meinst ihr sollte es gemacht werden?
Hi Jens,

tatsächlich mache auch ich das mal so und mal so. Prinzipiell bevorzuge ich, vor allem bei umfangreicheren Programmen, das Prinzip Klarheit vor Kürze. Also lieber Modulimport als nur die Funktionen. Das führt zu weniger Verwechslungen und bietet die Möglichkeit, gleiche Namen innerhalb verschiedener Module zu verwenden.

Ich gebe zu, dass ich auch ziemlich häufig den *-Import verwende, allerdings nur in bestimmte Fällen. So habe ich es mir angewöhnt, Konfigurationen und Konstanten in ein Extramodul zu schreiben, das ich dann per *-Import überall einbinde.

Gleiches gilt für spezielle Funktionssammlungen wie mein HTML-Codegenerierungsmodul, in dem ich Funktionen mit Tagnamen definiert habe, die bei Aufruf ihre Parameter in Tags einschließen und als Ergebnis den HTML-Code als String zurückgeben. Diese Funktionen binde ich in einem eigenen HTML-Seitengenerierungsmodul ein, aus dem ich dann aber nur die Funktionen zur Seitengenerierung ins Hauptprogramm importiere.

Grüße,
Michel
Diese Nachricht zersört sich in 5 Sekunden selbst ...
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

jens hat geschrieben:Wie handhabt ihr das bzw. wie meinst ihr sollte es gemacht werden?
Meist importiere ich die Klassen oder die Funktionen direkt außer wenn ich eine größere Anzahl Funktionen/Klassen aus einem Modul brauche, dann hole ich mir das Modul.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
lunar

Neben der Menge wie bei Leonidas spielt bei mir auch die "Eindeutigkeit" der Namen eine Rolle. Wenn man einem Namen nicht ansieht, was er bedeutet, dann importiere ich ihn meistens über das Modul.

Ein Beispiel: "urlopen" ist klar, daher importiere ich meist als "from urllib2 import urlopen". "join()" dagegen ist keineswegs ein aussagekräftiger Name, daher importiere ich eigentlich immer per "import os" und nutze dann "os.path.join()", selbst wenn ich nur "join()" brauche.

Sternchen-Imports nutze ich kaum, Konstanten habe ich auch selten. Nur bei Qt4 sehe ich das nicht kritisch, da die Klassen und Funktionen dieses Frameworks dank dessen Namenskonvention kaum Raum für Namenskonflikte geben. Daher nutze ich auch manchmal "from PyQt.QtGui import *"
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Ich handhabe es wie Leonidas bzw lunar. Bei Sachen wie join() verwende ich allerdings oftmals as, also zB:

Code: Alles auswählen

from os.path import join as pathjoin
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
Antworten