наименование физических величин в питоне - PullRequest
2 голосов
/ 19 ноября 2010

Я хотел бы установить хорошую схему именования для физических / математических величин, используемых в моем коде моделирования.Рассмотрим следующий пример:

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 символов на длину строки.

Заранее спасибо!

Ответы [ 2 ]

4 голосов
/ 19 ноября 2010

Я думаю, вы уже нашли хороший баланс. Выразительные имена важны, поэтому я полностью согласен с использованием wavelenght вместо лямбды в качестве атрибута класса. Таким образом, интерфейс остается четким и выразительным.

В длинной формуле, однако, лямбда_ является хорошим выбором в качестве сокращенной записи, потому что это общепринятая и широко используемая запись для длины волны в оптике. Я думаю, что когда вы реализуете формулу, вам нужно максимально приблизиться к форме уравнений, которые вы бы написали на листе бумаги (или в том виде, в каком они появляются в статье и т. Д.).

Вкратце: интерфейс должен быть выразительным, формулы - короткими.

0 голосов
/ 21 ноября 2010

Используйте Python3, и вы можете использовать фактический символ λ для имени переменной.

Я с нетерпением жду написания кода вроде:

from math import pi as π

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