试图导入它们时,在Python文件中使用破折号是否可以?

问题描述:

基本上当我有一个Python文件,如:试图导入它们时,在Python文件中使用破折号是否可以?

python-code.py 

及用途:

import (python-code) 

解释给我语法错误。

关于如何解决它的任何想法?破折号在Python文件名中是非法的吗?

你应该检查PEP 8,样式指南Python代码:

封装和模块名模块应该是短期的,全小写的名字。如果提高可读性,则可以在模块名称中使用下划线。尽管不建议使用下划线,Python包也应该有简短的全小写名称。

由于模块名称映射到文件名,并且某些文件系统不区分大小写并截断长名称,所以重要的是选择模块名称的时间相当短 - 在Unix上这不会成为问题,但是代码传输到较旧的Mac或Windows版本或DOS时可能会出现问题。

换句话说:重命名文件:

+42

这个问题与风格无关,它是一个_syntax_ _error_ – hop 2009-04-19 00:09:34

+1

如下图所示,可能仍然有一个带有这个名字的文件,所以风格指南非常相关。 – 2012-11-19 22:08:53

问题是python-code不是标识符。解析器将此视为python减去code。当然,这不会做你所问的。您将需要使用一个也是有效的Python标识符的文件名。尝试用下划线替换-

+1

+1。从来没有想过Python源代码的文件名应该是一个有效的标识符,原因**文件名**将用于引用模块对象。 – andy 2015-04-16 01:51:07

你也许可以导入它通过一些黑客__import__,但如果你已经不知道怎么了,你不应该。 Python模块名称应该是有效的变量名称(“标识符”) - 这意味着如果你有一个模块foo_bar,你可以在Python中使用它(print foo_bar)。你不能用一个奇怪的名字(print foo-bar - >语法错误)这样做。

在代码中要注意的另一件事是导入不是函数。所以import(python-code)应该是import python-code,正如一些人已经提到的那样,它被解释为“import python minus code”,而不是你想要的。如果你真的需要导入的文件,在其名称中的破折号,你可以做以下::

python_code = __import__('python-code') 

但是,也如上文提到的,这是不是真的建议。你应该改变文件名,如果它是你控制的东西。

TLDR

破折号非法的,但你不应该使用他们的3个原因:

  1. 您需要特殊的语法与破折号导入文件
  2. 没有人希望模块名称与破折号
  3. 这是违反Python Style Guide的建议

如果你一定要导入的文件名以短划线特殊的语法是这样的:

module_name = __import__('module-name') 

好奇,为什么我们需要特殊的语法?

的原因特殊语法的是,当你写import somename你创建与标识符somename(所以你可以稍后例如somename.funcname使用它)的模块对象。当然module-name不是一个有效的标识符,因此是一个有效的特殊语法。

你不明白为什么模块名称不是有效的标识符?

别担心 - 我也没有。这里有一个提示可以帮助你:看看这条python行:x=var1-var2。你是否看到作业右侧的减法或带有短划线的变量名?

PS

没有原来在我的答案,除了包括什么,我认为是所有其他的答案信息最相关的位在同一个地方