2010-04-08 8 views
1

En python, il n'y a aucun moyen de faire la différence entre les arguments, les variables locales et les variables globales. La façon facile de le faire peut-être avoir une convention de codage tels que, variables locales et les variables globales convention de codage en Python

  • Les variables globales commencent par _ et lettre majuscule
  • arguments se terminent par des _
 
_Gvariable = 10 
def hello(x_, y_): 
    z = x_ + y_ 

Est-ce une façon Pythonian aller? Je veux dire, y a-t-il des normes de codage bien établies/acceptées pour les différencier en python?

=== === AJOUTÉE

je veux juste faire la distinction entre les arguments et les variables locales. Comme les arguments sont donnés de l'extérieur, et plus comme une ROM dans le sens où il n'est pas supposé être en lecture seule. C++ fournit le mot-clé const pour empêcher les arguments de changer, mais pas pour python. Je pensais que l'ajout _ peut être un moyen d'imiter cette fonctionnalité en python.

+6

lecture PEP 8: http://www.python.org/dev/peps/pep-0008/ –

+1

Ce que vous motive à faire cela? Il est généralement assez évident d'où un nom vient et il est assez facile (à moins que vous fassiez quelque chose de fou) de comprendre à partir de la lecture du code. –

+1

Si vous voulez empêcher les fonctions de changer les arguments, comme const, vous pouvez utiliser le module 'copy' sur les objets que vous passez en argument, de sorte que vous passez une copie au lieu de l'objet réel. Cependant, cela pourrait être déroutant, aussi. Probablement le meilleur juste pour écrire le code qui fait exactement ce que vous voulez, et écrivez unittests pour assurer cela. –

Répondre

2

Je ferais tout votre programmation python selon PEP 8 lignes directrices. Quiconque doit lire votre code vous en sera reconnaissant.

http://www.python.org/dev/peps/pep-0008/

Pourquoi est-il nécessaire de faire la distinction entre les arguments et les variables locales, puisque l'on est seulement un sous-ensemble de l'autre. Vous pouvez utiliser locals(), globals() et vars() pour afficher la portée si vous rencontrez des problèmes locaux globale. Le module inspect peut également vous aider. Et si possible, évitez autant que possible d'utiliser des variables globales.

0

C'est absolument terrible. Il n'y a aucune raison d'utiliser un schéma de nommage spécial pour les objets globaux et locaux. Aussi, vous devriez éviter d'avoir des objets globaux à moins qu'ils ne soient des fonctions, des classes ou des constantes. Les noms des constantes doivent être en majuscules et séparés par des traits de soulignement. LIKE_THIS, les noms de classe ressemblent à LikeThis et les noms de fonctions et de méthodes doivent ressembler à n'importe quel autre nom. Les noms d'objets qui sont spécifiques à l'implémentation, peuvent être modifiés/supprimés à tout moment ou ne peuvent pas être invoqués pour d'autres bonnes raisons doivent être précédés d'un trait de soulignement.

Vous devriez également lire le PEP Styleguide Python 8 qui couvre ces derniers et plus de règles liées au style que vous devriez suivre aussi longtemps que cela ne fait pas votre code moins lisible. La plupart des projets Python suivent ceci ou au moins une version compatible de ce guide de style.

1

Il est généralement évident en python quelles variables sont locales et lesquelles sont globales, puisque pour modifier une variable globale, vous devez la déclarer en utilisant le mot-clé global au début d'une fonction. Cependant, il m'arrive d'ajouter une déclaration globale même si python n'a pas besoin de la compiler, afin de souligner qu'un objet est global - par ex. modifier une structure de données globale mutable.

Les arguments doivent être évidentes parce qu'ils sont dans la déclaration de fonction. Comme d'autres l'ont dit, les constantes devraient être dans UPPER_CASE_WITH_UNDERSCORES, qui est une convention partagée par de nombreux langages.

Si vous trouvez que vous rencontrez des difficultés à suivre qui sont variables globales, locales et paramètres Je suggère que le problème peut être vos fonctions sont trop longues et en faire trop. Les fonctions & devraient être courtes et faire exactement une chose. Je commence à avoir des démangeaisons si mes fonctions dépassent 10-20 lignes de code.

Je recommande la lecture du livre code propre par Robert Martin. Les exemples sont en Java, mais les principes s'appliquent à toutes les langues.