1074 Stimmen

Wie lautet die Namenskonvention in Python für Variablen- und Funktionsnamen?

Da ich aus einem C#-Hintergrund komme, sind die Namenskonventionen für Variablen und Methodennamen normalerweise entweder camelCase oder PascalCase:

// C# example
string thisIsMyVariable = "a"
public void ThisIsMyMethod()

In Python habe ich das oben Gesagte gesehen, aber ich habe auch gesehen, dass Unterstriche verwendet wurden:

# python example
this_is_my_variable = 'a'
def this_is_my_function():

Gibt es einen bevorzugten, endgültigen Codierungsstil für Python?

35voto

Thomas Wouters Punkte 124421

Es gibt PEP 8 wie andere Antworten zeigen, aber PEP 8 ist nur der Styleguide für die Standardbibliothek, und er wird nur darin als Evangelium genommen. Eine der häufigsten Abweichungen von PEP 8 für andere Teile des Codes ist die Benennung von Variablen, insbesondere für Methoden. Es gibt keinen einzigen vorherrschenden Stil, obwohl man angesichts der Menge an Code, der mixedCase verwendet, bei einer strengen Zählung wahrscheinlich eine Version von PEP 8 mit mixedCase erhalten würde. Es gibt kaum eine andere Abweichung von PEP 8, die so weit verbreitet ist.

35voto

Sufiyan Ghori Punkte 17189

Zusätzlich zu dem, was @JohnTESlade beantwortet hat. Googles Python Style Guide hat einige sehr gute Empfehlungen,

Zu vermeidende Namen

  • einstellige Namen außer für Zähler oder Iteratoren
  • Bindestriche (-) in jedem Paket/Modulnamen
  • \__double_leading_and_trailing_underscore__ names (reserviert durch Python)

Namenskonvention

  • "Intern" bedeutet intern in einem Modul oder geschützt oder privat innerhalb einer Klasse.
  • Das Voranstellen eines einzelnen Unterstrichs (_) unterstützt den Schutz von Modulvariablen und -funktionen (nicht enthalten bei import * from). Das Voranstellen eines doppelten Unterstrichs (__) vor eine Instanzvariable oder -methode dient effektiv dazu, die Variable oder Methode für ihre Klasse privat zu machen (unter Verwendung von Namensmangling).
  • Platzieren Sie verwandte Klassen und Funktionen der obersten Ebene zusammen in einem Modul. Im Gegensatz zu Java müssen Sie sich nicht auf eine Klasse pro Modul beschränken.
  • Utilice CapWords für Klassennamen, aber lower_with_under.py für Modulnamen. Obwohl es viele bestehende Module mit dem Namen CapWords.py wird jetzt davon abgeraten, weil es verwirrend ist, wenn das Modul zufällig nach einer Klasse benannt ist. ("Moment - habe ich geschrieben import StringIO o from StringIO import StringIO ?")

Von Guidos Empfehlungen abgeleitete Leitlinien enter image description here

30voto

André Punkte 12587

Die meisten Python-Benutzer bevorzugen Unterstriche, aber selbst ich benutze Python seit mehr als 5 Jahren und mag sie immer noch nicht. Sie sehen für mich einfach hässlich aus, aber vielleicht ist das alles Java in meinem Kopf.

Mir gefällt CamelCase einfach besser, da es besser zu der Art und Weise passt, wie Klassen benannt werden, es fühlt sich logischer an, wenn man SomeClass.doSomething() als SomeClass.do_something() . Wenn Sie sich im globalen Modulindex von Python umsehen, werden Sie beides finden, was daran liegt, dass es sich um eine Sammlung von Bibliotheken aus verschiedenen Quellen handelt, die im Laufe der Zeit gewachsen ist, und nicht um etwas, das von einem Unternehmen wie Sun mit strengen Kodierungsregeln entwickelt wurde. Ich würde sagen, die Quintessenz ist: Verwenden Sie das, was Ihnen besser gefällt, es ist nur eine Frage des persönlichen Geschmacks.

21voto

crystalattice Punkte 4903

Ich persönlich versuche, CamelCase für Klassen, mixedCase-Methoden und Funktionen zu verwenden. Variablen werden normalerweise durch Unterstriche getrennt (wenn ich mich daran erinnern kann). Auf diese Weise kann ich auf einen Blick erkennen, was genau ich aufrufe, und nicht alles sieht gleich aus.

17voto

alebian Punkte 766

Es gibt ein Papier darüber: http://www.cs.kent.edu/~jmaletic/papers/ICPC2010-CamelCaseUnderScoreClouds.pdf

TL;DR Es besagt, dass snake_case besser lesbar ist als camelCase. Deshalb verwenden moderne Sprachen snake (oder sollten es tun), wo immer sie können.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X