Wie imports formatieren?

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.
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Wie imports formatieren?

Beitragvon jens » Mittwoch 19. März 2008, 15:31

Ich hab es nun schon öfters gesehen, das Leute imports Zeile für Zeile machen, z.B. so:

Code: Alles auswählen

import os
import sys
import datetime

Ich fasse das eigentlich immer zusammen, also so:

Code: Alles auswählen

import os, sys, datetime


Welche Variante nutzt ihr und warum?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Beitragvon audax » Mittwoch 19. März 2008, 15:33

erst die normalen import, Zeile für Zeile, dannach die `from foo import bar`, die ich zusammenfasse.
Das sollten ja sowieso nicht so viele auf einmal sein.
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Beitragvon Y0Gi » Mittwoch 19. März 2008, 16:07

Jedes Modul in eine eigene Zeile. Das ist nicht nur übersichtlicher, sondern erlaubt auch das gezielte Auskommentieren. Auch in der Versionskontrolle sind Änderungen IMHO lesbarer. Auch ein Ausgliedern in eine neue Zeile entfällt, wenn man nachträglich die `from`-Syntax nutzen will. Davon ab wird man mit einer einzelnen Zeile ohnehin kaum auskommen, um alle Imports einer umfangreicheren Anwendung noch in EOL 79 unter zu bekommen.

Weiterhin ordne ich die Imports primär nach Modulnamen und (meistens) sekundär die importierten Objekte. Die Imports teile ich insgesamt in drei Gruppen: Mitgelieferte (also seit 2.5 auch ElementTree und SQLite), Third-Party (z.B. SQLAlchemy, Werkzeug) und Applikationseigene. So weiß man direkt, was woher kommt.

Das (bis auf die alphabetische Sortierung vielleicht) schreibt IIRC auch das entsprechende PEP (8?) vor.
BlackJack

Beitragvon BlackJack » Mittwoch 19. März 2008, 17:01

Ich schreibe auch eine Zeile pro Import, erst die aus der Standardbibliothek, dann die von Drittanbietern, gefolgt von eigenen. Danach die ``from``-Importe. Alles immer alphabetisch sortiert. Grund ist auch bei mir Versionsverwaltung, insbesondere wenn man mit mehreren Leuten zusammen arbeitet, verhindert man so, dass Importe mehrfach vorkommen.
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Beitragvon EnTeQuAk » Mittwoch 19. März 2008, 17:25

Bei mir ebenso, jedoch das ich weniger auf die Alphabetische Reihenfolge achte.

Was die `from` importe angeht, wird aus einem Modul jeweils mit nur einer Importanweisung importiert:

Code: Alles auswählen

from module import p1, p2, p3, p4  ....  p7 \
    p8, p9, p10 #usw...

Manch einer schreibt ja dafür auf der zweiten Zeile gern nen neuen Import, das find ich aber unübersichtlich und durch die Einrückung sieht man später gut das alles zusammen gehört :)


Gruß, Christopher
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Beitragvon birkenfeld » Mittwoch 19. März 2008, 19:28

Y0Gi hat geschrieben:Weiterhin ordne ich die Imports primär nach Modulnamen und (meistens) sekundär die importierten Objekte. Die Imports teile ich insgesamt in drei Gruppen: Mitgelieferte (also seit 2.5 auch ElementTree und SQLite), Third-Party (z.B. SQLAlchemy, Werkzeug) und Applikationseigene. So weiß man direkt, was woher kommt.


So halte ichs auch. Nur sortiere ich nach Länge des Modulnamens (sieht viiiiiiiiel schöner aus :D).
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
EyDu
User
Beiträge: 4868
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Beitragvon EyDu » Mittwoch 19. März 2008, 19:52

birkenfeld hat geschrieben:Nur sortiere ich nach Länge des Modulnamens (sieht viiiiiiiiel schöner aus :D).


Dann bin ich also doch nicht der einzige, der diese seltsame Angewohnheit hat :D Sieht aber auch einfach elegant aus. :)
Benutzeravatar
nomade
User
Beiträge: 7
Registriert: Samstag 12. Januar 2008, 22:36

Beitragvon nomade » Mittwoch 19. März 2008, 22:21

Jedes Modul in eine Zeile bringt einerseits Übersichtlichkeit und zusätzlich
auch eine einfache Möglichkeit des Auskommentierents.

Evtl. ist auch noch eine "kategorien-basierende" Import-Gruppierung sinnvoll:
1. import <Standard-Lib>
2. import <3rd Party>
3. import <eigene module>

Alles in allem jedoch Geschmackssache.

Beste Grüße
Nomade
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Donnerstag 20. März 2008, 08:08

Das Gruppieren in Standard-Lib, 3rd Party und eigene module mache ich auch. Allerdings bin ich wohl mit der alles in einer Zeile Variante ehr die Ausnahme.
Aber ihr habt eigentlich recht, es ist übersichtlicher es auf Zeilen zu verteilen, vielleicht sollte ich mir das auch angewöhnen ;)

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Beitragvon CM » Donnerstag 20. März 2008, 09:00

Hoi,

Nebenbei, ihr wisst schon, daß man (ab 2.4) "from"-Importe klammern kann, also

Code: Alles auswählen

from module import (p1, p2, p3, p4  ....  p7,
    p8, p9, p10)
?

Mehr dazu findet sich hier: http://www.python.org/dev/peps/pep-0328/

Gruß,
Christian
Benutzeravatar
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Beitragvon mitsuhiko » Donnerstag 20. März 2008, 09:52

CM hat geschrieben:Nebenbei, ihr wisst schon, daß man (ab 2.4) "from"-Importe klammern kann, also

Code: Alles auswählen

from module import (p1, p2, p3, p4  ....  p7,
    p8, p9, p10)
?

Klar, aber da gefällt mir der Backslash besser.
TUFKAB – the user formerly known as blackbird
meneliel
User
Beiträge: 256
Registriert: Montag 25. Juni 2007, 08:35
Kontaktdaten:

Beitragvon meneliel » Donnerstag 20. März 2008, 10:00

EyDu hat geschrieben:
birkenfeld hat geschrieben:Nur sortiere ich nach Länge des Modulnamens (sieht viiiiiiiiel schöner aus :D).


Dann bin ich also doch nicht der einzige, der diese seltsame Angewohnheit hat :D Sieht aber auch einfach elegant aus. :)


ich wusste, irgendwas kann ich noch machen, dass es schöner aussieht ;-)

Aber hab am Anfang immer alles in einer Zeile geschrieben aus der Std-lib den Rest jedes in eine Zeile.

Aber dann hat ich irgendwo gelesen, dass besser jedes import auf eine neue Zeile.
Dann hab ich die die nicht aus der std-lib

Und zum Schluss meine eigenen (nur funktioniert das nicht immer :() und da weiß ich bisher nicht woran es liegt. Füge den Ordner am Anfang mit sys.path.append hinzu und importiere dann das Modul. Funktioniert im Prinzip prima auf nem lokalen Rechner. Liegt der Code auf einem anderen Rechner/Server, wo ich über meinen lokalen Rechner drauf zugreife funktioniert das nicht mehr :( warum? Aber die restlichen Skripte liegen ja dann auch dort.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Donnerstag 20. März 2008, 14:05

Ich bin böse und gemein, sortiere meine Imports nur thematisch in drei Gruppen und verschosse wissentlich gegen PEP8 indem ich mehrere Imports in einer Zeile zusammenfasse. Genauso wie ich die ``from``-Imports alle in einer Zeile habe (oder mehreren, mit Backslashes, die Klammern sind mir bekannt, nutze ich aber nicht), statt immer neue ``from``-Imports zu machen. Die Reihenfolge ist die, in der ich die Module benötigt habe.

Das Argument mit der Versionskontrolle ist zwar ok, aber ich habe bisher keine Probleme von der Seite zu vermelden gehabt und so spare ich einfach viele Zeilen Import-Code, der in einer Zeile ebenso verständlich ist.

:twisted:
My god, it's full of CARs! | Leonidasvoice vs Modvoice

Wer ist online?

Mitglieder in diesem Forum: Baidu [Spider], Bing [Bot], jan.b