3

シミュレーション コードで使用される物理/数学量の適切な命名スキームを確立したいと考えています。次の例を検討してください。

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

2 に答える 2

4

すでにバランスが取れていると思います。表現力豊かな名前は重要なので、クラス属性としてラムダの代わりにwavelenghtを使用することに完全に同意します。このようにして、インターフェースは明確で表現力豊かなままです。

ただし、長い式では、lambda_は省略表記として適切な選択です。これは、光学系の波長に対して一般的に受け入れられ、広く使用されている表記であるためです。数式を実装するとき、あなたがしたいことは、一枚の紙に書く方程式の形にできるだけ近づけることだと思います(またはそれらが記事などに現れるように)。

つまり、インターフェースを表現力豊かに保ち、数式を短くします。

于 2010-11-19T17:36:43.447 に答える
0

Python3 を使用すると、変数名に実際の記号 λ を使用できます。

次のようなコードを書くことを楽しみにしています。

from math import pi as π

sphere_volume = lambda r : 4/3 * π * r**3
于 2010-11-21T01:59:34.470 に答える