2

Je voudrais établir un bon schéma de nommage pour les quantités physiques/mathématiques utilisées dans mon code de simulation. Prenons l'exemple suivant:nommer des quantités physiques en python

from math import * 

class GaussianBeamIntensity(object): 
    """ 
    Optical intensity profile of a Gaussian laser beam. 
    """ 

    def __init__(self, intensity_at_waist_center, waist_radius, wavelength): 
     """ 
     Arguments: 

     *intensity_at_waist_center*: The optical intensity of the beam at the 
      center of its waist in W/m^2 units. 

     *waist_radius*: The radius of the beam waist in meters. 

     *wavelength*: The wavelength of the laser beam in meters. 

     """ 

     self.intensity_at_waist_center = intensity_at_waist_center 
     self.waist_radius = waist_radius 
     self.wavelength = wavelength 
     self._calculate_auxiliary_quantities() 

    def _calculate_auxiliary_quantities(self): 
     # Shorthand notation 
     w_0, lambda_ = self.waist_radius, self.wavelength 

     self.rayleigh_range = pi * w_0**2/lambda_ 
     # Generally some more quantities could follow 

    def __call__(self, rho, z): 
     """ 
     Arguments: 

     *rho*, *z*: Cylindrical coordinates of a spatial point. 
     """ 
     # Shorthand notation 
     I_0, w_0 = self.intensity_at_waist_center, self.waist_radius 
     z_R = self.rayleigh_range 

     w_z = w_0 * sqrt(1.0 + (z/z_R)**2) 
     I = I_0 * (w_0/w_z)**2 * exp(-2.0 * rho**2/w_z**2) 
     return I 

Quel schéma de nommage cohérent proposeriez-vous pour les propriétés physiques (propriétés, arguments de fonction, etc.) afin d'équilibrer entre lisibilité et notation concise (que les formules restent relativement courtes)? Pourriez-vous s'il vous plaît affiner l'exemple ci-dessus? Ou peut-être proposer un meilleur régime?

Il serait bon de suivre les directives de PEP8, en se souvenant que "Une cohérence insensée est le Hobgoblin des petits esprits". Il semble difficile de s'en tenir à des noms descriptifs tout en respectant la limite traditionnelle de 80 caractères pour les longueurs de ligne.

Merci d'avance!

+4

Quelle valeur avez-vous * vraiment * obtenir de la limite de 80 caractères en tout cas? Ce n'est pas comme si vous allez envoyer votre code dans un e-mail aux années 1980 –

+2

@Klaus: 80 limite de char est bien cependant; par exemple, il peut y avoir plus de fichiers ouverts sur l'écran et ne pas avoir à accepter une ligne vraiment longue qui occupe un tas d'écrans. (Par exemple, en ce moment dans xmonad sur mes deux écrans, j'ai environ 12 fenêtres carrelées, la plupart avec le code de recadrage à ~ 90 caractères ou plus.) –

+0

@jimbob Je vois votre point de vue, mais j'utilise un IDE. –

Répondre

4

Je pense que vous avez déjà trouvé le bon équilibre. Les noms expressifs sont importants, donc je suis totalement d'accord avec l'utilisation de longueur d'onde au lieu de lambda comme attribut de classe. De cette façon, l'interface reste claire et expressive.

Dans une formule longue, cependant, lambda_ est un bon choix comme notation abrégée, parce que c'est une notation couramment acceptée et largement utilisée pour la longueur d'onde dans l'optique. Je pense que lorsque vous implémentez une formule, ce que vous voulez faire est de rester aussi proche que possible de la forme des équations que vous écrivez sur un morceau de papier (ou comme ils apparaissent dans un article, etc.). En bref: gardez les interfaces expressives, les formules courtes.

+0

Lorsque vous utilisez ce raccourci de notation, presque toutes les méthodes commencent par celles-ci :) En effet, les interfaces sont descriptives de cette façon. Ce dont je ne suis pas sûr: le nommage des arguments de la fonction. Ils sont pour la plupart descriptifs mais longs (voir ctor), et les docstrings pour eux semblent montrer un certain degré de redondance ... – cornail

+1

@cornail - Il n'y a rien de mal à avoir des noms de fonctions et docstrings redondants ...Gardez à l'esprit que les gens sont beaucoup plus susceptibles de lire le nom de la fonction que la docstring! Personnellement, je me tromperais du côté des noms de fonctions long-ish, mais expressifs. –

+0

+1, j'ai aimé votre logique! – slezica

0

Utilisez Python3 et vous pouvez utiliser le symbole réel λ pour un nom de variable.

J'attends avec impatience le code écrit comme:

from math import pi as π 

sphere_volume = lambda r : 4/3 * π * r**3 
Questions connexes