Python中物理量的命名

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个字符行长度限制时,似乎难以坚持使用描述性名称。
提前致谢!

5
80 字符限制到底有什么实际用处呢?毕竟你不会把代码通过电子邮件发送回 1980 年代。 - Klaus Byskov Pedersen
2
@Klaus:80个字符的限制很好,例如可以在屏幕上打开更多的文件,而不必容纳一个非常长的行占用大量的屏幕空间。(例如,现在在我的两个屏幕上的xmonad中,我有大约12个窗口平铺,大多数代码裁剪在约90个字符左右。) - dr jimbob
@jimbob 我明白你的观点,但我使用集成开发环境。 - Klaus Byskov Pedersen
1
cornail:你的代码很好,没有超过80个字符的限制。你在寻找什么? - user225312
随机公式提示:我更喜欢使用 foo**0.5 而不是 sqrt(foo),以及 / e**(2 * bar) 而不是 * exp(-2 * bar) - Beni Cherniavsky-Paskin
显示剩余4条评论
2个回答

4
我认为你已经找到了良好的平衡点。有表现力的名称很重要,因此我完全赞同在类属性中使用“wavelength”而不是“lambda”。这样界面保持清晰和有表现力。
尽管如此,在长公式中,“lambda_”作为简写符号是一个不错的选择,因为这是光学中波长的通用和广泛使用的表示法。我认为当你实现一个公式时,你想做的就是尽可能地接近你在纸上写的方程形式(或者它们出现在一篇文章等中的形式)。
总之:保持界面有表现力,公式简短。

当使用这种速记符号时,几乎每个方法都以这些:)开头。确实,这种接口的描述方式非常清晰明了。我不确定的是函数参数的命名。它们大多数是描述性的但很长(请参见ctor),并且它们的文档字符串似乎显示出一定程度的冗余... - cornail
1
@cornail - 函数名和文档字符串存在冗余并没有什么问题... 请记住,人们更有可能读取函数名称而不是文档字符串!就我个人而言,我会在具有表现力的函数名称上犯一些长的错误。 - Joe Kington

0

使用Python3,您可以使用实际符号λ作为变量名。

我期待着编写像这样的代码:

from math import pi as π

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接