Ausgehend von einem C # -Hintergrund lautet die Namenskonvention 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 werden:
# python example
this_is_my_variable = 'a'
def this_is_my_function():
Gibt es einen bevorzugteren, definitiven Codierungsstil für Python?
findMeAClass
ist vielleicht hässlicher alsfind_me_a_class
.Der Google Python Style Guide hat die folgende Konvention:
Ein ähnliches Namensschema sollte auf a angewendet werden
CLASS_CONSTANT_NAME
quelle
property
... vielleicht ist es eine Frage dessen, was der Gegenstand vorgibt zu sein, anstatt was er tatsächlich istDavid Goodger (in „Code wie ein Pythonista“ hier ) beschreibt den PEP 8 Empfehlungen wie folgt:
joined_lower
für Funktionen, Methoden, Attribute, Variablenjoined_lower
oderALL_CAPS
für KonstantenStudlyCaps
für KlassencamelCase
nur um bereits bestehenden Konventionen zu entsprechenquelle
joined_lower
für Konstanten vorschlägt , nur "alle Großbuchstaben mit Unterstrichen, die Wörter trennen". Neugierig auch auf die neue Enum- Funktion.StudlyCaps for classes
ist eine großartige universelle Regel für Klassen in fast allen Sprachen. Warum sind dann einige Python-Klassen eingebaut (wiedatetime.datetime
folgt diese Konvention nicht?unittest.TestCase.assertEqual
folgen Freunde auch nicht der snake_case-Konvention. Die Wahrheit ist, dass Teile der Python-Standardbibliothek entwickelt wurden, bevor sich die Konventionen verfestigt hatten, und wir bleiben jetzt bei ihnen.Wie der Style Guide für Python Code zugibt,
Beachten Sie, dass sich dies nur auf die Standardbibliothek von Python bezieht . Wenn sie nicht so konsistent werden können, gibt es kaum Hoffnung auf eine allgemein eingehaltene Konvention für den gesamten Python-Code, oder?
Daraus und aus der Diskussion hier würde ich schließen, dass es keine schreckliche Sünde ist, wenn man beim Übergang zu Python weiterhin die (klaren und gut 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 hervorhebt, ist die interne Konsistenz am wichtigsten.
Fühlen Sie sich frei, mich als Ketzer zu entlassen. :-) Wie das OP bin ich noch kein "Pythonista".
quelle
Es gibt PEP 8 , wie andere Antworten zeigen, aber PEP 8 ist nur der Styleguide für die Standardbibliothek und wird nur als Evangelium darin verstanden. Eine der häufigsten Abweichungen von PEP 8 für andere Codeteile ist die Benennung von Variablen, insbesondere für Methoden. Es gibt keinen einzigen vorherrschenden Stil, obwohl man angesichts des Codevolumens, das MixedCase verwendet, wahrscheinlich eine Version von PEP 8 mit MixedCase erhalten würde, wenn man eine strenge Volkszählung durchführen würde. Es gibt kaum eine andere Abweichung von PEP 8, die genauso häufig ist.
quelle
Wie bereits erwähnt, soll PEP 8
lower_case_with_underscores
für Variablen, Methoden und Funktionen verwendet werden.Ich bevorzuge die Verwendung
lower_case_with_underscores
für Variablen undmixedCase
für Methoden und Funktionen, um den Code expliziter und lesbarer zu machen. Dem Zen von Python zu folgen "explizit ist besser als implizit" und "Lesbarkeit zählt"quelle
weiter zu dem, was @JohnTESlade geantwortet hat. Der Python-Styleguide von Google enthält einige hübsche Empfehlungen.
Zu vermeidende Namen
\__double_leading_and_trailing_underscore__ names
(reserviert von Python)Namenskonvention
CapWords
für Klassennamen, aberlower_with_under.py
für Modulnamen. Obwohl viele Module benannt sindCapWords.py
, wird davon abgeraten, da es verwirrend ist, wenn das Modul zufällig nach einer Klasse benannt wird. ("Warte - habe ich geschriebenimport StringIO
oderfrom StringIO import StringIO
?")Richtlinien, die aus Guidos Empfehlungen abgeleitet wurden
quelle
Die meisten Python-Leute bevorzugen Unterstriche, aber selbst ich benutze Python seit mehr als 5 Jahren, ich mag sie immer noch nicht. Sie sehen für mich nur hässlich aus, aber vielleicht ist das alles Java in meinem Kopf.
Ich mag CamelCase einfach besser, da es besser zu der Art und Weise passt, wie Klassen benannt werden. Es fühlt sich logischer an,
SomeClass.doSomething()
als zu habenSomeClass.do_something()
. Wenn Sie sich im globalen Modulindex in Python umschauen, werden Sie beides finden. Dies liegt an der Tatsache, dass es sich um eine Sammlung von Bibliotheken aus verschiedenen Quellen handelt, die im Laufe der Zeit gewachsen sind und nicht von einem Unternehmen wie Sun mit strengen Codierungsregeln entwickelt wurden . Ich würde sagen, das Fazit lautet: Verwenden Sie, was Sie besser mögen, es ist nur eine Frage des persönlichen Geschmacks.quelle
make_xpath_predicate
,make_xpath_expr
,make_html_header
,make_html_footer
SomeClass.doSomething()
(statische Methoden sind im Allgemeinen selten), die Sie normalerweise anrufenan_instance.do_something()
Persönlich versuche ich, CamelCase für Klassen, MixedCase-Methoden und -Funktionen zu verwenden. Variablen werden normalerweise durch Unterstriche getrennt (wenn ich mich erinnern kann). Auf diese Weise kann ich auf einen Blick erkennen, was genau ich anrufe, anstatt dass alles gleich aussieht.
quelle
Es gibt ein Papier darüber: http://www.cs.kent.edu/~jmaletic/papers/ICPC2010-CamelCaseUnderScoreClouds.pdf
TL; DR Es heißt, dass snake_case besser lesbar ist als camelCase. Deshalb verwenden (oder sollten) moderne Sprachen die Schlange, wo immer sie können.
quelle
Der Codierungsstil ist normalerweise Teil der internen Richtlinien- / Konventionsstandards einer Organisation, aber ich denke, im Allgemeinen ist der all_lower_case_underscore_separator-Stil (auch snake_case genannt) in Python am gebräuchlichsten.
quelle
Ich persönlich verwende Javas Namenskonventionen bei der Entwicklung in anderen Programmiersprachen, da diese konsistent und leicht zu befolgen sind. Auf diese Weise kämpfe ich nicht ständig darüber, welche Konventionen ich verwenden soll, was nicht der schwierigste Teil meines Projekts sein sollte!
quelle
library_function(my_arg)
).Normalerweise folgt man den Konventionen, die in der Standardbibliothek der Sprache verwendet werden.
quelle