如何按照PEP8规则缩写维度?

4

我需要添加一个创建3D纹理的函数。

在整个模块中,我使用蜗牛命名法。

我的选择是:

def texture_3d(...):
    pass

def texture_3D(...):
    pass

def texture3D(...):
    pass

函数应该取什么名字?

我并不关心意见:哪个看起来更好。我需要一些参考其他模块的内容来看最佳实践。

请至少提到一个具有类似功能的模块。

4个回答

4

与其仅依赖人类意见,也许我们可以问问马的想法?(比如从“马嘴里”得到信息。)换句话说,使用 pylint

我修改了你的代码,以便生成更少的消息。

''' some information here'''

def texture_3d(parameters):
    ''' a docstring'''
    return parameters

def texture_3D(parameters):
    ''' a docstring'''
    return parameters

def texture3D(parameters):
    ''' a docstring'''
    return parameters

pylint的结果如下:

************* Module temp
C:  7, 0: Invalid function name "texture_3D" (invalid-name)
C: 11, 0: Invalid function name "texture3D" (invalid-name)

------------------------------------------------------------------
Your code has been rated at 6.67/10 (previous run: 5.00/10, +1.67)

这只留下了选项texture_3d


pylint非常好用,我的模块已经完全通过了它的检查,所以像texture_3Dtexture3D这样的选项真的很糟糕,正如你所提到的。我选择了texture3d作为名称,类似于numpy和matplotlib中的函数命名方式。它也通过了pylint的测试。 - Szabolcs Dombi
好的,但那不是你的选项之一。 - Bill Bell

4

PEP 8规定函数名应使用下划线分隔的小写单词。由于3d/3D是否是实际单词存在争议,因此在名称texture_3dtexture3d(其中d为小写)之间会产生冲突。

看一些numpy函数,例如lagval3d, laggrid3d, hermegrid3d,名称texture3d似乎是一个不错的选择。

matplotlib文档中搜索类似名称会得到<name>3d<name>_3d之间的混合结果。

简而言之,这两个名称都被两个主要包接受。只是个人对这两者之间的选择。


numpymatplotlib都是很好的例子。我将调用函数texture3d(...) - Szabolcs Dombi
听起来NumPy和Matplotlib不符合PEP 8。这并不是世界末日,但问题确实要求“遵循PEP 8”,而不是“符合NumPy标准”。 - Jon Kiparsky

3

根据PEP-8的规定:

方法名和实例变量

使用函数命名规则: 遵循小写字母,单词间用下划线分隔以提高可读性。

这表明您的第一选项是最符合要求的。


3

简短回答: texture_3d

PEP-8对于函数名称的规定如下(关于函数名称):

函数名称应该是小写的,必要时使用下划线分隔单词以提高可读性。

混合大小写只允许在已经存在这种风格的情况下(例如threading.py),以保留向后兼容性。

由于“纹理”和“3D”是两个不同的单词,因此在它们之间放置下划线是一个好习惯。此外,函数名应该是小写的,所以不允许使用3D


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