Was ist die Namenskonvention in Python für Variable und Funktion?

Lesezeit: 7 Minuten

Benutzer-Avatar
Strahl

Aus einem C#-Hintergrund stammend, 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 Obige 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 vorzuziehenden, endgültigen Codierungsstil für Python?

Benutzer-Avatar
S. Lott

Siehe Python PEP 8: Funktions- und Variablennamen:

Funktionsnamen sollten sein Kleinbuchstaben, wobei Wörter durch Unterstriche getrennt sind wie nötig, um die Lesbarkeit zu verbessern.

Variablennamen folgen der gleichen Konvention wie Funktionsnamen.

gemischter Fall ist nur in Kontexten erlaubt, in denen dies bereits der vorherrschende Stil ist (z threading.py), um die Abwärtskompatibilität zu erhalten.

  • PEP = Python-Verbesserungsvorschlag.

    – Peter Mortensen

    31. Juli 2009 um 21:18 Uhr

  • @RickyRobinson Welchen hirntoten Code-Editor verwenden Sie, der nicht weiß, dass der Unterstrich ein Wort fortsetzt? Viele kostenlose, die das tun. Ich verwende Notepad++, wenn keine IDE verfügbar ist. Dafür können Sie eine Vorlage für die Python-Bearbeitung herunterladen. (Andere können noch nützlichere kostenlose Downloads empfehlen.)

    – WerkzeugmacherSteve

    16. Dezember 2013 um 20:34 Uhr


  • Ein Argument für den unterstrichenen Stil ist, dass Sie besser Ein-Buchstaben-Wörter verwenden können. Für (ein ziemlich dummes) Beispiel, findMeAClass ist vielleicht hässlicher als find_me_a_class.

    – Heltonbiker

    28. Juni 2014 um 21:16 Uhr

  • Ich finde, dass die Konvention von Variablennamen nur in Kleinbuchstaben für das wissenschaftliche Rechnen nicht geeignet ist, wo man oft auf bekannte Konstanten, Tensoren usw. stößt, die mit Großbuchstaben bezeichnet werden.

    – andreasdr

    17. Oktober 2014 um 20:00 Uhr


  • @rr PEP8 ist ein “Style Guide” und beschreibt sich selbst als Konvention, NICHT als Standard. Es erklärt auch klar die Gründe dafür, dass diese “Regeln” nicht immer befolgt werden.

    – Der Tahan

    13. März 2015 um 8:28 Uhr

Benutzer-Avatar
John Slade

Das Google Python-Styleguide hat folgende Konvention:

module_name, package_name, ClassName, method_name, ExceptionName, function_name, GLOBAL_CONSTANT_NAME, global_var_name, instance_var_name, function_parameter_name, local_var_name.

Ein ähnliches Namensschema sollte auf a angewendet werden CLASS_CONSTANT_NAME

  • a) Ich liebe Beispiele – danke. b) Unattraktive Mischung aus CamelCase und Unterstrichen? Aber: Ich bin neu bei Python und seinem flexibleren Datenmodell und wette, dass hinter Googles Leitfaden solide Gedanken stehen …

    – Matthäus Cornell

    10. September 2012 um 14:29 Uhr


  • @MatthewCornell Mischen ist nicht schlecht, solange Sie sich daran halten. Es erleichtert tatsächlich die Lesbarkeit, wenn Sie wissen, dass Funktionen Unterstriche haben und Klassen nicht.

    – Pithikos

    28. September 2014 um 9:53 Uhr

  • @MatthewCornell Ich würde nicht annehmen, dass es etwas mit Python zu tun hat. Go erzwingt tatsächlich willkürliche Schönheitsstandards und kann nicht kompiliert werden, wenn Sie sich beispielsweise nicht an die Konvention der geschweiften Klammern halten. Im Grunde ist es ein Würfelwurf, ob jemand wirklich sorgfältig nachgedacht hat oder einfach nur wirklich geliebt hat, wie er Dinge tut.

    – Partherschuss

    15. Juni 2015 um 21:14 Uhr


  • Würden Sie ein konstantes statisches Attribut als GLOBAL_CONSTANT_NAME betrachten? Es ist nicht genau global, da es im Rahmen der Klasse liegt.

    – Jakob T.

    23. Januar 2018 um 22:19 Uhr

  • geht dann rein property … vielleicht liegt es eher daran, was der Gegenstand zu sein vorgibt, als daran, was er tatsächlich ist

    – joel

    8. Oktober 2019 um 19:32 Uhr

Benutzer-Avatar
unmontiert

David Goodger (in „Code wie ein Pythonista“ hier) beschreibt die PEP 8-Empfehlungen wie folgt:

  • joined_lower für Funktionen, Methoden, Attribute, Variablen

  • joined_lower oder ALL_CAPS für Konstanten

  • StudlyCaps für Klassen

  • camelCase nur um bestehenden Konventionen zu entsprechen

  • +1 visuelle Beispiele. Obwohl ich nicht sehen konnte, wo PEP8 vorschlägt joined_lower zum Konstanten, nur “alle Großbuchstaben mit Unterstrichen, die Wörter trennen”. Neugierig auch auf die neue Enum-Funktion.

    – Bob Stein

    19. Januar 2015 um 13:11 Uhr

  • StudlyCaps for classes ist eine großartige universelle Regel für den Unterricht in fast allen Sprachen. Warum sind dann einige in Python eingebaute Klassen (wie z datetime.datetime hält sich nicht an diese Konvention?

    – Prahlad Yeri

    12. Januar 2017 um 10:52 Uhr


  • @ PrahladYeri: Leider unittest.TestCase.assertEqual und Freunde halten sich auch nicht an die Snake_Case-Konvention. Die Wahrheit ist, dass Teile der Python-Standardbibliothek entwickelt wurden, bevor sich die Konventionen verfestigt hatten, und wir hängen jetzt an ihnen fest.

    – Waschen

    18. März 2017 um 14:29 Uhr

  • CamelCase ist verwirrend, weil einige Leute sagen, es sei „camelCase“ (auch bekannt als „mixedCase“) und andere sagen, es sei „CamelCase“ (auch bekannt als „StudlyCaps“). Beispielsweise erwähnt der PEP “CamelCase”, während Sie “camelCase” erwähnen.

    – Pro Q

    26. Juni 2017 um 14:55 Uhr

  • Ihr Hier-Link ist tot, vielleicht sollte er durch so etwas ersetzt werden david.goodger.org/projects/pycon/2007/idiomatic

    – Wolf

    15. Oktober 2019 um 9:37 Uhr

Benutzer-Avatar
Jonik

Als die Styleguide für Python-Code gibt zu,

Die Namenskonventionen der Python-Bibliothek sind ein bisschen chaotisch, also werden wir das nie ganz konsistent bekommen

Beachten Sie, dass sich dies nur auf Pythons bezieht Standardbibliothek. Wenn sie nicht kommen können das konsistent, dann besteht kaum Hoffnung auf eine allgemeingültige Konvention für alle Python-Code, gibt es?

Daraus und aus der Diskussion hier würde ich schließen, dass es so ist nicht eine schreckliche Sünde, wenn man beim Übergang zu Python weiterhin die (eindeutigen und etablierten) Namenskonventionen von Java oder C# für Variablen und Funktionen verwendet. Denken Sie natürlich daran, dass es am besten ist, sich an den vorherrschenden Stil für eine Codebasis / ein Projekt / ein Team zu halten. Wie der Python Style Guide betont, innere Konsistenz zählt am meisten.

Fühlen Sie sich frei, mich als Ketzer abzutun. 🙂 Wie das OP bin ich kein “Pythonista”, jedenfalls noch nicht.

Wie bereits erwähnt, sagt PEP 8 zu verwenden lower_case_with_underscores für Variablen, Methoden und Funktionen.

Ich benutze lieber lower_case_with_underscores für Variablen u mixedCase für Methoden und Funktionen macht den Code expliziter und lesbarer. So nach dem Zen von Pythons „explizit ist besser als implizit“ und „Lesbarkeit zählt“

  • +1 Ich tausche diese beiden aus (ich verwende mixedCase für Variablen), aber wenn alles so deutlicher ist, wird sofort klar, womit Sie es zu tun haben, zumal Sie Funktionen weitergeben können.

    – Xiong Tschamiow

    12. Juli 2009 um 17:51 Uhr

  • Obwohl “Lesbarkeit” sehr subjektiv ist. Ich finde Methoden mit Unterstrich lesbarer.

    – Pithikos

    30. September 2014 um 15:24 Uhr

  • Ihre Präferenz war meine anfängliche Intuition, die aus vielen Jahren der Java-Entwicklung stammt. Ich verwende _ gerne für Variablen, aber für mich sieht es für Funktionen und Methoden etwas komisch aus.

    – Michael Szczepaniak

    13. Juli 2016 um 22:24 Uhr


Benutzer-Avatar
Thomas Wouters

Es gibt PEP 8, wie andere Antworten zeigen, aber PEP 8 ist nur der Styleguide für die Standardbibliothek und wird darin nur als Evangelium angesehen. Eine der häufigsten Abweichungen von PEP 8 für andere Codeteile ist die Variablenbenennung, speziell für Methoden. Es gibt keinen einzigen vorherrschenden Stil, obwohl man in Anbetracht der Menge an Code, der mixedCase verwendet, bei einer strengen Zählung wahrscheinlich mit einer Version von PEP 8 mit mixedCase enden würde. Es gibt kaum eine andere Abweichung von PEP 8, die so häufig vorkommt.

  • +1 Ich tausche diese beiden aus (ich verwende mixedCase für Variablen), aber wenn alles so deutlicher ist, wird sofort klar, womit Sie es zu tun haben, zumal Sie Funktionen weitergeben können.

    – Xiong Tschamiow

    12. Juli 2009 um 17:51 Uhr

  • Obwohl “Lesbarkeit” sehr subjektiv ist. Ich finde Methoden mit Unterstrich lesbarer.

    – Pithikos

    30. September 2014 um 15:24 Uhr

  • Ihre Präferenz war meine anfängliche Intuition, die aus vielen Jahren der Java-Entwicklung stammt. Ich verwende _ gerne für Variablen, aber für mich sieht es für Funktionen und Methoden etwas komisch aus.

    – Michael Szczepaniak

    13. Juli 2016 um 22:24 Uhr


weiter zu dem, was @JohnTESlade geantwortet hat. Python-Styleguide von Google hat einige ziemlich nette Empfehlungen,

Zu vermeidende Namen

  • Einzelzeichennamen mit Ausnahme von Zählern oder Iteratoren
  • Bindestriche (-) in jedem Paket-/Modulnamen
  • \__double_leading_and_trailing_underscore__ names (reserviert von Python)

Namenskonvention

  • “Intern” bedeutet intern für ein Modul oder geschützt oder privat innerhalb einer Klasse.
  • Das Voranstellen eines einzelnen Unterstrichs (_) bietet eine gewisse Unterstützung für den Schutz von Modulvariablen und -funktionen (nicht in import * from enthalten). Das Voranstellen eines doppelten Unterstrichs (__) an eine Instanzvariable oder -methode dient effektiv dazu, die Variable oder Methode für ihre Klasse privat zu machen (unter Verwendung von Namensverfälschung).
  • Platzieren Sie zusammengehörige Klassen und Top-Level-Funktionen in einem Modul. Anders als bei Java müssen Sie sich nicht auf eine Klasse pro Modul beschränken.
  • Verwenden CapWords für Klassennamen, aber lower_with_under.py für Modulnamen. Obwohl es viele vorhandene Module gibt, die benannt werden CapWords.py, davon wird jetzt abgeraten, da es verwirrend ist, wenn das Modul zufällig nach einer Klasse benannt wird. (“Warte – habe ich geschrieben import StringIO oder from StringIO import StringIO?”)

Leitlinien abgeleitet von Guidos Empfehlungen
Geben Sie hier die Bildbeschreibung ein

1144800cookie-checkWas ist die Namenskonvention in Python für Variable und Funktion?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy