2010-05-17 61 views
45

我试图将一个真正简单的模块放在一个.py源文件中,并且已经遇到了障碍。我打算将它称为scons-config,但import scons-config在Python中不起作用。我找到了this SO question,看着PEP8 style guide,但有点困惑,它没有提到双字名称的约定。python:命名一个具有双字名称的模块

解决此问题的正确方法是什么?

  • 模块名称:SconsConfig? scons_config? sconsconfig? scons.config?
  • 其中的单个.py文件的名称:scons-config.py? scons_config.py?

编辑:我确实看到了“使用下划线是不鼓励”,并留下了我在一个死胡同:我应该使用“sconsconfig”或“scons_config”(我想其他的人都出来了)?

+1

一个单一的'.py'是一个模块... – 2010-05-17 20:07:09

回答

53

如果必须,请始终使用下划线_

使用点.甚至不工作,否则

from scons.config import whatever 

将打破。

PEP 8清楚地描述它:

包和模块名称

模块应该是短,全部小写的名字下划线可以使用 在模块名称中如果它改善了可读性。 Python 应 也有短,全小写的名称,虽然使用下划线是 阻止

UPDATE:

直接定位你的问题:我想sconsconfig是罚款。它不是太长,很可读。

但是说实话,如果你使用下划线并且你的代码会随着任何一个决定运行,我不认为有人会责怪你。总是有一定的水平,你不应该在乎了。

+3

我看到“使用下划线是不鼓励的”,它让我陷入死胡同。 – 2010-05-17 20:07:23

+7

@Jason S:好吧,如果可读性真的受到影响或想到另一个名字,请使用它;)*仅*不鼓励,不禁止。 – 2010-05-17 20:09:43

+2

“总是有一定的水平,你不应该那么在意。”没错,但几乎总会对这些决定产生影响,如果你是像我这样的初学者,这是令人生畏的。谢谢! – 2010-05-17 20:16:53

2

-是不行的。该符号用于减号运算符。大多数编程语言也是如此。使用_或其他什么都没有。

11

首先,模块名称与单个.py文件的名称相同。在Python中,多个.py文件的集合就是一个包。

PEP-8不鼓励使用下划线拆分软件包名称。我的站点包目录中的一个快速峰值显示多字名称通常只是一起运行(例如,例如,setuptools,sqlalchemy)

模块名称(也就是文件名)可能被下划线分开(我通常这样做,因为我讨厌namesthatruntogethersoy可以读取它们)。

仅支持小写字母(根据PEP-8)。这可以避免从区分大小写转为区分大小写的文件系统时出现问题,反之亦然。

4

除了PEP-8之外,您还可以查看本地Python模块如何处理此问题。

如果您要比较the native modules of Python 2that of Python 3,您会发现官方开发人员的新趋势是避免大写和下划线。例如,ConfigParser在Python 2成为在Python 3

configparser望着这一点,最好的行动当然是避免大写字母,下划线,和刚刚加入的词放在一起,即sconsconfig