2

Ich möchte ein gutes Benennungsschema für physikalische/mathematische Größen in meinem Simulationscode erstellen. Betrachten Sie das folgende Beispiel:Benennung von physikalischen Größen in 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 

Was konsistente Benennungsschema würden Sie für die physikalischen Eigenschaften vorzuschlagen (Eigenschaften, Funktionsargumente etc.), um zwischen Lesbarkeit und prägnant Notation zu balancieren (dh Formeln bleiben relativ kurz) Könnten Sie bitte das obige Beispiel verfeinern? Oder vielleicht ein besseres Schema vorschlagen?

Es wäre nett, den Richtlinien von PEP8 zu folgen und sich daran zu erinnern, dass "eine törichte Konsistenz der Hobgoblin der kleinen Geister" ist. Es scheint schwierig zu sein, bei beschreibenden Namen zu bleiben, während die traditionelle Grenze von 80 Zeichen für Zeilenlängen eingehalten wird.

Vielen Dank im Voraus!

+4

Welchen Wert Sie tun * wirklich * von der Grenze sowieso 80 Zeichen bekommen? Es ist nicht so, als würden Sie Ihren Code in einer E-Mail zurück zu den 1980er senden –

+2

@Klaus: 80 Char-Grenze ist zwar schön; Beispielsweise können mehr Dateien auf dem Bildschirm geöffnet sein und müssen nicht nur eine wirklich lange Zeile aufnehmen, die eine Menge Bildschirmplatz einnimmt. (ZB in xmonad auf meinen zwei Bildschirmen habe ich etwa 12 Fenster gefliest; die meisten mit Code beschneiden ~ 90 Zeichen oder so.) –

+0

@jimbob Ich sehe Ihren Punkt, aber ich benutze eine IDE. –

Antwort

4

Ich denke, Sie haben bereits die gute Balance gefunden. Expressive Namen sind wichtig, daher stimme ich der Verwendung von Wavelength anstelle von Lambda als Klassenattribut völlig zu. Auf diese Weise bleibt die Benutzeroberfläche klar und ausdrucksstark.

In einer langen Formel ist Lambda_ jedoch eine gute Wahl als Kurzschreibweise, da dies eine allgemein akzeptierte und weit verbreitete Notation für die Wellenlänge in der Optik ist. Ich denke, wenn Sie eine Formel implementieren, wollen Sie so nahe wie möglich an der Form der Gleichungen bleiben, die Sie auf ein Blatt Papier schreiben würden (oder wie sie in einem Artikel erscheinen usw.).

Kurz: Halten Sie die Schnittstellen ausdrucksvoll, die Formeln kurz.

+0

Wenn Sie diese Kurzschreibweise verwenden, beginnt fast jede Methode mit diesen. Tatsächlich sind die Schnittstellen auf diese Weise beschreibend. Worüber ich mich unsicher bin: die Benennung der Funktionsargumente. Sie sind meist beschreibend aber lang (siehe ctor), und die Docstrings für sie scheinen eine gewisse Redundanz zu zeigen ... – cornail

+1

@cornail - Es gibt nichts wirklich falsches mit redundanten Funktionsnamen und Docstrings ...Denken Sie daran, dass Personen den Funktionsnamen viel eher als den Docstring lesen! Persönlich würde ich auf der Seite von langen, aber expressiven Funktionsnamen irren. –

+0

+1, ich mochte deine Logik! – slezica

0

Verwenden Sie Python3, und Sie können das tatsächliche Symbol λ für einen Variablennamen verwenden.

ich freuen uns darauf, den Code zu schreiben wie:

from math import pi as π 

sphere_volume = lambda r : 4/3 * π * r**3 
Verwandte Themen