Venant d’un fond C #, la convention de nommage des variables et des noms de méthodes est généralement soit camelCase, soit PascalCase:
// C# example
string thisIsMyVariable = "a"
public void ThisIsMyMethod()
En Python, j'ai vu ce qui précède, mais j'ai aussi vu des traits de soulignement utilisés:
# python example
this_is_my_variable = 'a'
def this_is_my_function():
Existe-t-il un style de codage définitif plus préférable pour Python?
Voir Python PEP 8 .
Les noms de fonction doivent être en minuscules, avec des mots séparés par des tirets bas si nécessaire pour améliorer la lisibilité.
mixedCase n'est autorisé que dans les contextes où c'est déjà le style dominant
Variables ...
Utilisez les règles de dénomination de la fonction: minuscules avec des mots séparés par des tirets bas si nécessaire pour améliorer la lisibilité.
Personnellement, je m'en écarte car je préfère aussi mixedCase
à lower_case
pour mes propres projets.
Google Python Guide de style a la convention suivante:
nom_module, nom_package, NomClasse, nom_méthode, NomException, nom_fonction, GLOBAL_CONSTANT_AME, nom_var, nom_var, nom_var, instance, nom_parameter_local, nom_var_local
Un schéma de nommage similaire devrait être appliqué à un CLASS_CONSTANT_NAME
David Goodger (dans "Code Like a Pythonista" ici ) décrit les recommandations du PEP 8 comme suit:
joined_lower
pour les fonctions, méthodes, attributs, variables
joined_lower
ou ALL_CAPS
pour les constantes
StudlyCaps
pour les cours
camelCase
uniquement pour se conformer aux conventions préexistantes
Comme le Guide de style pour Python Code admet,
Les conventions de nommage de la bibliothèque de Python sont un peu en désordre, nous ne pourrons jamais obtenir cela complètement cohérent
Notez que cela fait simplement référence à bibliothèque standard de Python. S'ils ne peuvent pas obtenir this cohérent, il n'y a guère d'espoir d'avoir une convention généralement respectée pour tout Python code, est Là?
De cela, et de la discussion ici, je déduirais que ce n'est pas un péché horrible si on continue à utiliser par exemple. Conventions de dénomination pour les variables et les fonctions de Java ou de C # (claires et bien établies) lors du passage à Python. En gardant à l'esprit, bien sûr, qu'il est préférable de respecter le style dominant pour une base de code/projet/équipe. Comme le souligne le Python Style Guide, cohérence interne est primordial.
N'hésitez pas à me rejeter comme hérétique. :-) Comme le PO, je ne suis pas un "Pythonista", pas encore de toute façon.
Il existe PEP 8 , comme le montrent d’autres réponses, mais PEP 8 n’est que le guide de style de la bibliothèque standard et n’y est considéré que comme un évangile. L'une des déviations les plus fréquentes de PEP 8 pour d'autres morceaux de code est la désignation des variables, en particulier pour les méthodes. Il n'y a pas de style prédominant unique, bien que, compte tenu du volume de code utilisant mixedCase, si l'on procédait à un recensement strict, on aboutirait probablement à une version de PEP 8 avec mixedCase. Il n’ya guère d’autre écart par rapport au PEP 8 qui soit aussi courant.
Comme mentionné, PEP 8 dit d'utiliser lower_case_with_underscores
pour les variables, méthodes et fonctions.
Je préfère utiliser lower_case_with_underscores
pour les variables et mixedCase
pour les méthodes et les fonctions rend le code plus explicite et lisible. Ainsi, après le Zen de Python "Explicite est meilleur qu'implicite" et "La lisibilité compte"
Personnellement, j'essaie d'utiliser CamelCase pour les classes, les méthodes mixtes et les fonctions. Les variables sont généralement séparées par un trait de soulignement (quand je peux m'en souvenir). De cette façon, je peux dire en un coup d'œil ce que j'appelle exactement, au lieu que tout soit identique.
La plupart des python préfèrent les traits de soulignement, mais même si j'utilise python depuis plus de 5 ans, je ne les aime toujours pas. Ils me semblent moche, mais c'est peut-être tout le Java dans ma tête.
J'aime tout simplement mieux CamelCase, car il correspond mieux à la façon dont les classes sont nommées. Il est plus logique d'avoir SomeClass.doSomething()
que SomeClass.do_something()
. Si vous regardez dans l'index de module global en python, vous trouverez les deux, ce qui est dû au fait qu'il s'agit d'un ensemble de bibliothèques provenant de sources différentes qui ont connu une croissance du temps supplémentaire et non pas quelque chose qui a été développé par une société comme Sun avec des règles de codage strictes. . Je dirais que l'essentiel est: utilisez ce que vous préférez, c'est juste une question de goût personnel.
suite à ce que @JohnTESlade a répondu. Le guide de style python de Google contient des recommandations très utiles,
Noms à éviter
\__double_leading_and_trailing_underscore__ names
(réservé par Python)Convention de nommage
CapWords
pour les noms de classe, mais lower_with_under.py
pour les noms de module. Bien qu'il existe de nombreux modules existants nommés CapWords.py
, ceci est maintenant déconseillé car il est déroutant de constater que le module porte le nom d'une classe. ("attends - est-ce que j'ai écrit import StringIO
ou from StringIO import StringIO
?")Il existe un article à ce sujet: http://www.cs.kent.edu/~jmaletic/papers/ICPC2010-CamelCaseUnderScoreClouds.pdf
TL; DR Il est dit que snake_case est plus lisible que camelCase. C'est pourquoi les langues modernes utilisent (ou devraient utiliser) le serpent partout où elles le peuvent.
Le style de codage fait généralement partie des normes de politique/convention internes d'une organisation, mais je pense qu'en général, le style all_lower_case_underscore_separator (également appelé snake_case) est plus courant en python.
Personnellement, j'utilise les conventions de nommage de Java lors du développement dans d'autres langages de programmation, car elles sont cohérentes et faciles à suivre. De cette façon, je ne lutte pas continuellement pour savoir quelles conventions utiliser, ce qui ne devrait pas être la partie la plus difficile de mon projet!
En règle générale, on respecte les conventions utilisées dans la bibliothèque standard du langage.