Wat is de naamgevingverdrag in Python voor variabele en functienamen?

Afkomstig van een C # -achtergrond Het benamingsverdrag voor variabelen en methodamennamen zijn meestal ofwel CamelCase of Pascalcase:

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

In Python heb ik het bovenstaande gezien, maar ik heb ook underscores gezien die worden gebruikt:

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

Is er een meer voorkeur, definitieve coderingsstijl voor Python?


1, Autoriteit 100%

Zie Python PEP 8: functie en variabele namen :

Functie-namen moeten kleine letters, met woorden gescheiden door onderstrepingstekens indien nodig om de leesbaarheid te verbeteren.

Variabele namen volgen hetzelfde verdrag als functienamen.

MIXEDCASE is alleen toegestaan ​​in contexten waar dat al de heersende stijl is (bijv. draadsy.py ), om achterwaartse compatibiliteit te behouden.


2, Autoriteit 89%

De Google Python Style Guide heeft de volgende conventie:

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.

Een vergelijkbare naamgevingsschema moet worden toegepast op een CLASS_CONSTANT_NAME


3, Autoriteit 27%

David Goodger (in “Code zoals een Pythonista” hier ) beschrijft de aanbevelingen van PEP 8 als volgt:

  • joined_lowerVOOR FUNCTIES, METHODEN,
    attributen, variabelen

  • joined_lowerOF ALL_CAPSVOOR
    constanten

  • StudlyCapsVOOR KLASSEN

  • camelCaseALLEEN OM TE CONFORMEN AAN
    reeds bestaande conventies


4, Autoriteit 4%

Er is pep 8 , als andere antwoorden show, maar PEP 8 is alleen de StyleGuide voor de standaardbibliotheek en wordt er alleen als evangelie genomen. Een van de meest voorkomende afwijkingen van PEP 8 voor andere stukken code is de variabele naamgeving, specifiek voor methoden. Er is geen enkele doorheerse stijl, hoewel het volume van de code die mengkast gebruikt, als men een strikte telling zou maken, zou men waarschijnlijk eindigen met een versie van PEP 8 met mixedcase. Er is weinig andere afwijking van PEP 8 die vrij zo vaak is.


5, Autoriteit 3%

Zoals vermeld, zegt PEP 8 om lower_case_with_underscoresvoor variabelen, methoden en functies te gebruiken.

Ik geef de voorkeur aan het gebruik van lower_case_with_underscoresvoor variabelen en mixedCaseVoor methoden en functies maakt de code explicieter en leesbaarder. Aldus volgend op de Zen van Python’s “expliciet is beter dan impliciete” en “leesbaarheid telt “


6, Autoriteit 3%

verder op wat @JohnTESlade heeft geantwoord. Google’s python-stijlgidsbevat een aantal mooie aanbevelingen,

Namen die je moet vermijden

  • namen van één teken behalve tellers of iterators
  • streepjes (-) in een pakket-/modulenaam
  • \__double_leading_and_trailing_underscore__ names(gereserveerd door Python)

Naamconventie

  • “Intern” betekent intern in een module of beschermd of privé binnen een klasse.
  • Voorafgaand aan een enkel onderstrepingsteken (_) biedt enige ondersteuning voor het beschermen van modulevariabelen en functies (niet inbegrepen bij import * van). Een dubbel onderstrepingsteken (__) toevoegen aan een instantievariabele of -methode dient er in feite toe om de variabele of methode privé te maken voor zijn klasse (met behulp van naamverwisseling).
  • Plaats gerelateerde klassen en functies op het hoogste niveau samen in een module. In tegenstelling tot Java is het niet nodig om jezelf te beperken tot één klasse per module.
  • Gebruik CapWordsvoor klassenamen, maar lower_with_under.pyvoor modulenamen. Hoewel er veel bestaande modules zijn met de naam CapWords.py, wordt dit nu afgeraden omdat het verwarrend is als de module naar een klasse is vernoemd. (“wacht — heb ik import StringIOof from StringIO import StringIOgeschreven?”)

Richtlijnen afgeleid van de aanbevelingen van Guido


Antwoord 7, autoriteit 2%

De meeste python-mensen geven de voorkeur aan onderstrepingstekens, maar zelfs ik gebruik python nu al meer dan 5 jaar, ik vind ze nog steeds niet leuk. Ik vind ze er gewoon lelijk uitzien, maar misschien is dat de hele Java in mijn hoofd.

Ik vind CamelCase gewoon beter omdat het beter past bij de manier waarop klassen worden genoemd. Het voelt logischer om SomeClass.doSomething()te hebben dan SomeClass.do_something(). Als je rondkijkt in de globale module-index in python, zul je beide vinden, wat te wijten is aan het feit dat het een verzameling bibliotheken is uit verschillende bronnen die in de loop van de tijd is gegroeid en niet iets dat is ontwikkeld door een bedrijf als Sun met strikte codeerregels . Ik zou zeggen dat de bottom line is: gebruik wat je lekkerder vindt, het is gewoon een kwestie van persoonlijke smaak.


Antwoord 8, autoriteit 2%

Persoonlijk probeer ik CamelCase te gebruiken voor klassen, mixedCase-methoden en -functies. Variabelen zijn meestal gescheiden onderstrepingstekens (voor zover ik me kan herinneren). Op deze manier kan ik in één oogopslag zien wat ik precies noem, in plaats van dat alles er hetzelfde uitziet.


Antwoord 9

Er is een artikel hierover: http://www. cs.kent.edu/~jmaletic/papers/ICPC2010-CamelCaseUnderScoreClouds.pdf

TL;DR Er staat dat snake_case beter leesbaar is dan camelCase. Dat is de reden waarom moderne talen slang gebruiken (of zouden moeten gebruiken) waar ze maar kunnen.


Antwoord 10

De coderingsstijl maakt meestal deel uit van de interne beleids-/conventienormen van een organisatie, maar ik denk dat in het algemeen de all_lower_case_underscore_separatorstijl (ook wel snake_case genoemd) het meest voorkomt in python.


Antwoord 11

Ik gebruik persoonlijk Java’s naamgevingsconventies bij het ontwikkelen in andere programmeertalen, omdat het consistent en gemakkelijk te volgen is. Op die manier worstel ik niet continu over welke conventies ik moet gebruiken, wat niet het moeilijkste deel van mijn project zou moeten zijn!


Antwoord 12

Meestal volgt men de conventies die worden gebruikt in de standaardbibliotheek van de taal.

Other episodes