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?
Wie sollte man Importieren?
- Michael Schneider
- User
- Beiträge: 569
- Registriert: Samstag 8. April 2006, 12:31
- Wohnort: Brandenburg
Hi Jens,jens hat geschrieben:Wie handhabt ihr das bzw. wie meinst ihr sollte es gemacht werden?
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 ...
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
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.jens hat geschrieben:Wie handhabt ihr das bzw. wie meinst ihr sollte es gemacht werden?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
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 *"
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 *"
- 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
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2