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

基本上,当我有一个Python文件,如:

python-code.py 

并使用:

 import (python-code) 

解释器给我的语法错误。

任何想法如何解决它? 破折号在python文件名是不合法的?

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

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

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

换句话说:重命名你的文件:)

在你的代码中另外要注意的是导入不是一个函数。 所以import(python-code)应该是import python-code ,正如一些已经提到的,被解释为“导入python减代码”,而不是你想要的。 如果你真的需要导入一个名字短划线的文件,你可以这样做:

 python_code = __import__('python-code') 

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

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

TLDR

破折号不是非法的,但你不应该使用它有三个原因:

  1. 您需要特殊的语法才能使用破折号导入文件
  2. 没有人希望模块名称带有短划线
  3. 这违反了Python风格指南的build议

如果你确实需要使用短划线来导入文件名,那么这个特殊的语法是:

 module_name = __import__('module-name') 

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

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

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

别担心 – 我也没有。 这里有一个技巧来帮助你:看看这个python行: x=var1-var2 。 你看到在作业的右侧减法或用短划线的variables名?

PS

除了包括我认为是来自所有其他答案的最相关信息位之外,我的答案中没有任何原始信息

你可以通过一些__import__黑客来导入它,但是如果你还不知道怎么做,你就不应该这么做。 Python模块名称应该是有效的variables名称(“标识符”) – 这意味着如果你有一个模块foo_bar ,你可以在Python中使用它( print foo_bar )。 你将无法用一个奇怪的名字( print foo-bar – > syntax error)来做到这一点。