2

私はシミュレーションコードで使用されている物理的/数学的な量の良い命名体系を確立したいと思います。次の例を考えてみましょう:物理量の名前を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 

命名スキームを使用すると、数式が比較的短いままであること可読性簡潔な表記(間バランスをとるために、物理的性質(物性、関数の引数など)のために提案する何一貫した)?上記の例を改善していただけますか?または、より良い体系を提案するか?

PEP8のガイドラインに従い、「愚かな一貫性は少しの心のホッコブリン」であることを覚えておくとよいでしょう。伝統的な80文字の行の長さに従いながら、わかりやすい名前に固執するのは難しいようです。

ありがとうございます!

+4

あなたは*本当に*とにかく80文字の制限から、どのような値を得るのですか?あなたのコードを電子メールで送って、1980年の@ –

+2

@Klausに戻ってしまうようなものではありません。たとえば、画面上にさらに多くのファイルを開くことができ、実際に長い行を1つだけ収容する必要がなく、画面の不動産を一杯にすることができます。 (例えば、私の2つの画面上のxmonadでは、約12個のウィンドウがタイル状に並べられています;ほとんどが90文字以上でコードがトリミングされます) –

+0

@jimbob私はあなたの意見を見ていますが、私はIDEを使用します。 –

答えて

4

私はあなたがすでに良いバランスを見つけたと思います。表現の名前は重要なので、私はクラス属性としてλrefの代わりにwavelenghtの使用に完全に同意します。このようにして、インタフェースは明確かつ表現力豊かなままです。

しかし、長い式では、lambda_は光学式の波長に一般に認められ広く使用されている表記法であるため、簡略表記として良い選択です。私は、数式を実装するとき、あなたがしたいことは、紙の上に書く方程式の形式(または記事などに表示されるような形)に可能な限り近づけることだと思います。

簡潔に言えば、インターフェイスは表現力豊かで、式は短くしておいてください。

+0

この簡略表記のものを使用すると、ほぼすべてのメソッドがこれらから始まります:)実際、インターフェイスはこのように記述的です。 私が不明なことは:関数の引数の命名です。彼らはほとんど記述的ですが長いです(ctorを参照してください)、彼らのためのdocstringsはある程度の冗長性を示すようです... – cornail

+1

@cornail - 冗長な関数名とdocstringsを持つことは本当に間違っていません...人々は関数名よりもはるかにdocstringよりも読んでいることに注意してください!個人的には、長い味方ではなく、表現力豊かな関数名のほうが間違っています。 –

+0

+1、私はあなたのロジックが気に入りました! – slezica

0

Python3を使用して、変数名に実際のシンボルλを使用できます。

私のようなコードを書くことを楽しみにして:

from math import pi as π 

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