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

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?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

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

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

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:

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

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: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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

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

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 ;)

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

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
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

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:

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.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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 (former) Modvoice
Antworten