python: 如何命名一个由两个单词组成的模块
我正在尝试创建一个非常简单的模块,里面只有一个.py的源文件,但已经遇到了一些问题。我本来想叫它 scons-config
,但是在Python中用 import scons-config
是不行的。我找到了一些资料,比如这个问题和PEP8风格指南,但我有点困惑,因为里面没有提到两个单词的命名规则。
那我该怎么处理这个呢?
- 模块名称:SconsConfig?scons_config?sconsconfig?scons.config?
- 里面的单个.py文件的名称:scons-config.py?scons_config.py?
补充:我看到“使用下划线是不推荐的”,这让我陷入了困境:我应该用“sconsconfig”还是“scons_config”(我想其他的选项都不行了)?
4 个回答
除了PEP-8这个规范,你还可以看看Python自带的模块是怎么处理这个问题的。
如果你对比一下Python 2的自带模块和Python 3的自带模块,你会发现官方开发者的新趋势是尽量避免使用大写字母和下划线。比如,Python 2中的ConfigParser
在Python 3中就变成了configparser
。
从这个角度来看,最好的做法就是避免使用大写字母和下划线,而是把单词直接连在一起,比如sconsconfig
。
首先,模块的名字和单个 .py 文件的名字是一样的。在 Python 里,多个 .py 文件放在一起就叫做一个包。
PEP-8 这个规范不建议用下划线来分隔包的名字。看看我的 site-packages 目录,你会发现多个单词的名字通常是连在一起的,比如 setuptools 和 sqlalchemy。
模块的名字(也就是文件名)可以用下划线分隔(我通常会这么做,因为我不喜欢那些连在一起的名字,读起来很费劲)。
只用小写字母(根据 PEP-8 的规定)。这样可以避免在区分大小写和不区分大小写的文件系统之间转换时出现问题。
如果必须的话,最好使用下划线 _
。
如果用点 .
,那是行不通的,否则
from scons.config import whatever
会出错。
不过,PEP 8 里有明确的说明:
包和模块名称
模块的名字应该是简短且全小写的。如果使用下划线能让名字更易读,那是可以的。Python的包也应该是简短且全小写的,不过不建议使用下划线。
更新:
直接回答你的问题:我觉得 sconsconfig
这个名字挺好的。它不长,而且很容易读懂。
但老实说,如果你用下划线也没人会责怪你,而且无论你怎么写代码都能正常运行。总有一些事情你可以不必太在意。