2010-10-25 7 views
3

Consultez le code suivant:Python: Est-ce mauvais style de donner un argument au même nom que la fonction?

def localize(value, localize=None): 
    # do something with the localize argument 

La variable localize contient des informations si le paramètre global de localisation doit être respectée ou non. Il est appelé par le même nom à travers trois couches de code. Quel est le moindre mal,

  • ombre le nom de la fonction avec le nom de l'argument ou
  • utiliser un nom différent dans cette fonction que dans tout le reste de la base de code, malgré les avoir absolument le même sens?

La fonction localize n'utilise pas la récursivité, donc ne pas pouvoir s'appeler n'est pas un problème.

/edit: changer le nom de la fonction est hors de question, puisqu'il s'agit d'une API publique. La seule marge de manœuvre est dans le nom de l'argument.

Répondre

11

Je dirais que c'est un mauvais style. Au lieu de changer le nom de la fonction, vous pouvez changer le nom du paramètre. Peut-être pourriez-vous utiliser un nom comme locale ou localization? Un nom est probablement un meilleur choix qu'un verbe de toute façon.

+0

'localization' sonne comme un très bon compromis. –

1

Quoi de plus susceptible de se passer, l'appelant est confus en ayant à passer dans un autre argument nommé, ou quelqu'un va le refactoriser avec récursion plus tard? Si vous avez besoin d'utiliser la récursivité, vous pouvez toujours utiliser une récursivité mutuelle pour vous éloigner de la portée de l'observation.

+0

Je ne peux pas imaginer un scénario où transformer cette fonction particulière en récursivité aurait un sens. Cela revient vraiment à une question de style. –

1

Rien n'est contre cette pratique selon le PEP8, mais je suggère de ne pas utiliser ce genre de nommage, bien qu'il n'y ait aucun problème à l'utiliser techniquement parlant.

Si vous faites partie d'un projet, énoncez conjointement une convention de dénomination qui ne vous permettrait pas de vous tromper sur les variables et fonctions nommées de même nom. PEP8 suggère d'ajouter votre variable avec un trait de soulignement en cas de conflit avec un mot réservé, vous pouvez faire la même chose dans votre cas.

1

Oui, c'est une mauvaise forme parce que c'est déroutant (2 significations pour un mot).

Je réécrire comme un booléen, avec True comme valeur par défaut:

def localize(value, use_global_setting=True): 
    ... 
Questions connexes