web-dev-qa-db-fra.com

Quelle est la convention de dénomination dans Python pour les noms de variable et de fonction?

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?

692
Ray Vega

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.

800
S.Lott

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

621
JohnTESlade

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

228
unmounted

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.

40
Jonik

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.

32
Thomas Wouters

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"

29
claytron

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.

17
crystalattice

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.

16
André

suite à ce que @JohnTESlade a répondu. Le guide de style python de Google contient des recommandations très utiles,

Noms à éviter

  • noms de caractères uniques, sauf pour les compteurs ou les itérateurs
  • tirets (-) dans n'importe quel paquet/nom de module
  • \__double_leading_and_trailing_underscore__ names (réservé par Python)

Convention de nommage

  • "Interne" signifie interne à un module ou protégé ou privé dans une classe.
  • La préfixe d'un simple trait de soulignement (_) prend en charge la protection des variables et des fonctions du module (non inclus avec import * de). Ajouter un double trait de soulignement (__) à une variable d'instance ou à une méthode sert effectivement à rendre la variable ou la méthode privée de sa classe (à l'aide de nom mangling).
  • Placez les classes et les fonctions de niveau supérieur associées dans un module. Contrairement à Java, il n’est pas nécessaire de vous limiter à une classe par module.
  • Utilisez 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?")

Lignes directrices dérivées des recommandations de Guido enter image description here

14
Sufiyan Ghori

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.

10
alebian

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.

3
fuentesjr

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!

1
BradyLange

En règle générale, on respecte les conventions utilisées dans la bibliothèque standard du langage.

0
yfeldblum