Frage

Ich bin ziemlich neu in Python, und ich mag, dass mein erstes ernsthaftes Open-Source-Projekt entwickeln. Ich möchte fragen, was das gemeinsame ist Codierstil für Python-Projekte. Ich werde auch setzen, was ich jetzt tun.

1.- Was ist die am weitesten verbreitete Spaltenbreite? (Die ewige Frage)
Ich bin derzeit auf 80 Spalten stecken (und es ist ein Schmerz!)

2.- Was zitiert zu benutzen? (Ich habe alles und PEP gesehen 8 nichts klar erwähnen)
Ich verwende einfache Anführungszeichen für alles, aber Docstrings, die dreifache doppelte Anführungszeichen verwenden.

3.- Wo finde ich meine Importe setzen?
Ich bin sich bei Datei-Header in dieser Reihenfolge setzen.

import sys
import -rest of python modules needed-

import whatever
import -rest of application modules-

<code here>

4.- Kann ich "import whatever.function wie blah"?
Ich sah einige Dokumente, die Mißachtung dies zu tun.

5.- Tabs oder Leerzeichen für Einrückungen?
Derzeit mit 4 Leerzeichen Registerkarten.

6.- Variable Namensgebung Stil? Ich verwende Klein für alles andere als Klassen, die ich in camelcase setzen.

Alles, was Sie empfehlen würden?

War es hilfreich?

Lösung

PEP 8 ist so ziemlich „die Wurzel“ aller gängigen Stil Führungen.

Google Python Style Guide hat einige Teile, die sehr gut durchdacht werden von, aber andere sind idiosynkratisch (die beide Raum Einzüge anstelle der beliebten vier-Raum Einsen und der Camelcase-Stil für Funktionen und Methoden anstelle des camel_case Stils, sind ziemlich große Idiosynkrasien).

Auf Ihre spezifischen Fragen:

  

1.- Was ist die am weitesten verbreitete Spaltenbreite? (Die ewige Frage)   Ich bleibe noch zu 80 Spalten   (Und es ist ein Schmerz!)

80 Spalten sind am beliebtesten

  

2.- Was zitiert zu benutzen? (Ich habe alles gesehen und PEP 8 nicht erwähnt   alles klar) Ich verwende Single   Angebote für alles, aber Docstrings,   die Verwendung triple doppelte Anführungszeichen.

Ich ziehe den Stil, den Sie verwenden, aber auch Google war nicht in der Lage, einen Konsens darüber zu erreichen: - (

  

3.- Wo platziere ich meine Importe? Ich setze sie auf Datei-Header in diesem   bestellen.

     

import sys importieren -Rest von Python   Module benötigt -

     

Import was importieren -Rest von   Anwendungsmodule -

     

Ja, sehr gute Wahl, und beliebt zu.

  

4.- Kann ich "import whatever.function als blah"? ich sah einige   Dokumente, die Mißachtung dies zu tun.

Ich empfehle Ihnen dringend, immer Importmodule - keine bestimmten Namen aus dem Inneren eines Moduls. Dies ist nicht nur Stil - es gibt starke Vorteile z.B. in Testbarkeit dass dabei. Die as Klausel ist in Ordnung, ein Moduls Namen oder zu vermeiden Kollisionen zu verkürzen.

  

5.- Tabs oder Leerzeichen für Einrückungen? Derzeit mit 4 Leerzeichen Registerkarten.

Overwhelmingly am beliebtesten sind.

  

6.- Variable Namensgebung Stil? Ich verwende Klein für alles, aber Klassen,   die ich setzen in camelcase.

Fast alle Namen Klassen mit Groß Anfangs- und Konstanten mit allen Großbuchstaben.

Andere Tipps

1.- Fast jeder hat ein 16: 9 oder 16:10 Monitor jetzt Tage. Selbst wenn sie sie nicht über eine Breitbild haben haben viele Pixel, 80 Cols ist keine große praktische Deal Breaker wie es war, als jeder in der Befehlszeile in einem Remote-Terminal-Fenster auf einem 4-Hacking wurde: 3-Monitor an 320 X 240 I in der Regel die Linie enden, wenn sie zu lang, was subjektiv ist. Ich bin bei 2048 X 1152 auf einem 23" Monitor-X 2.

2.- Einfache Anführungszeichen standardmäßig, so dass Sie doppelte Anführungszeichen nicht entkommen müssen, doppelte Anführungszeichen, wenn Sie einbetten einfache Anführungszeichen benötigen, und Triple-Angebote für Strings mit eingebetteten Zeilenumbrüchen.

3.- Setzen Sie sie am Anfang der Datei, manchmal setzen Sie sie in der Haupt Funktion, wenn sie nicht global an das Modul benötigt werden.

4.- Es ist ein gemeinsames Idiom einige Module umbenennen. Ein gutes Beispiel ist die folgende.

try:
    # for Python 2.6.x
    import json
except ImportError:
    # for previous Pythons
    try:
        import simplejson as json
    except ImportError:
        sys.exit('easy_install simplejson')

aber der bevorzugte Weg, nur eine Klasse oder Funktion zu importieren ist from module import xxx mit dem optionalen as yyy bei Bedarf

5.- Immer Verwendung SPACES! 2 oder 4 solange kein TABS

6.- Klassen bis UpperCaseCamelStyle sollten, werden Variablen klein geschrieben manchmal lowerCamelCase oder manchmal all_lowecase_separated_by_underscores, ebenso wie Funktionsnamen. "Constants" sollte ALL_UPPER_CASE_SEPARATED_BY_UNDERSCORES

sein

Im Zweifel beziehen sich auf die PEP 8 , der Python-Quelle , Konventionen in einer Code-Basis vorhanden ist. Aber das Wichtigste, was ist sein konsistent wie möglich. All Python-Code aussehen soll es von der gleichen Person geschrieben wurde, wenn überhaupt möglich.

Da bin ich wirklich verrückt „Styling“ Ich habe die Richtlinien aufschreiben werde, dass ich zur Zeit in einem in der Nähe von 8k SLOC Projekt verwenden, um mit etwa 35 Dateien, die meisten davon entspricht PEP8.

  1. PEP8 sagt 79 (WTF?), Ich gehe mit 80 und ich bin es jetzt verwendet. Weniger Augenbewegung, nachdem alle!

  2. Docstrings und Sachen, die Spannweiten mehr Zeilen in ''‘. Alles andere in ''. Ich habe auch nicht wie doppelte Anführungszeichen, verwende ich nur einfache Anführungszeichen die ganze Zeit ... das ist denke, weil ich die JavaScript-Ecke kam zu bilden, wo es ist einfach zu verwenden leichter ‚‘, weil auf diese Weise Sie nicht alle entkommen müssen das HTML-Material: O

  3. An der Spitze, built-in, bevor benutzerdefinierten Anwendungscode. Aber ich gehe auch mit einem „fail früh“ -Ansatz, also wenn es etwas, dass die Version (GTK zum Beispiel) abhing würde ich importieren, das erst.

  4. ab, die meisten der Zeit ich mit dem Import foo gehen und von foo import, aber es gibt einen bestimmten Fällen (zB der Name bereits von einem anderen Import definiert ist) waren ich von foo import bar als bla verwenden zu.

  5. 4 Spaces. Zeitraum. Wenn Sie wirklich Registerkarten verwenden möchten, stellen Sie sicher, dass sie in Leerzeichen konvertieren, bevor begehen, wenn sie mit SCM arbeiten. Aber nie (!) MIX Tabulatoren und Leerzeichen !!! Es kann und wird schrecklichen Fehler einführen.

  6. some_method oder foo_function, eine Konstante, MyClass.

Sie können auch über Einzug in Fällen argumentieren, wo ein Methodenaufruf oder mehr Zeilen Spannweiten etwas, und Sie über den Stil, welche Linie Fortsetzung argumentieren können Sie verwenden. Entweder Surround alles mit () oder tun, um die \ am Ende der Leitung Dingens. Ich mache das letztere, und ich auch Platz Betreiber und andere Sachen am Anfang der nächsten Zeile.

# always insert a newline after a wrapped one
from bla import foo, test, goo, \
                another_thing

def some_method_thats_too_long_for_80_columns(foo_argument, bar_argument, bla_argument,
                                              baz_argument):

    do_something(test, bla, baz)

    value = 123 * foo + ten \
            - bla

    if test > 20 \
       and x < 4:

        test_something()

    elif foo > 7 \
         and bla == 2 \
         or me == blaaaaaa:

        test_the_megamoth()

Auch habe ich einige Richtlinien für die Vergleichsoperationen, verwende ich is(not) immer gegen None True False zu überprüfen, und ich habe nie einen impliziten boolean Vergleich wie if foo: tut, habe ich immer tun if foo is True:, dynamische Typisierung ist schön, aber in einigen Fällen Ich will nur sicher sein, dass das, was das richtige tut!

Eine andere Sache, die ich tun ist, um nie leere Strings zu verwenden! Sie sind in einer Konstanten-Datei, in dem Rest des Codes Ich habe Sachen wie username == UNSET_USERNAME oder label = UNSET_LABEL es ist nur mehr beschreibend auf diese Weise!

Ich habe auch einige strengen Richtlinien Leerzeichen und andere verrückte Sachen, aber ich mag es (weil ich es bin verrückt), schrieb ich auch ein Skript, das prüft meinen Code:
http://github.com/BonsaiDen/Atarashii/blob/master/checkstyle

ACHTUNG (!): Es wird Ihre Gefühle verletzt! Noch mehr als JSLint tut ...

Aber das ist nur meine 2 Cent.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top