试图导入它们时,在Python文件中使用破折号是否可以?
基本上当我有一个Python文件,如:试图导入它们时,在Python文件中使用破折号是否可以?
python-code.py
及用途:
import (python-code)
解释给我语法错误。
关于如何解决它的任何想法?破折号在Python文件名中是非法的吗?
你应该检查PEP 8,样式指南Python代码:
封装和模块名模块应该是短期的,全小写的名字。如果提高可读性,则可以在模块名称中使用下划线。尽管不建议使用下划线,Python包也应该有简短的全小写名称。
由于模块名称映射到文件名,并且某些文件系统不区分大小写并截断长名称,所以重要的是选择模块名称的时间相当短 - 在Unix上这不会成为问题,但是代码传输到较旧的Mac或Windows版本或DOS时可能会出现问题。
换句话说:重命名文件:
问题是python-code
不是标识符。解析器将此视为python
减去code
。当然,这不会做你所问的。您将需要使用一个也是有效的Python标识符的文件名。尝试用下划线替换-
。
+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个原因:
- 您需要特殊的语法与破折号导入文件
- 没有人希望模块名称与破折号
- 这是违反Python Style Guide的建议
如果你一定要导入的文件名以短划线特殊的语法是这样的:
module_name = __import__('module-name')
好奇,为什么我们需要特殊的语法?
的原因特殊语法的是,当你写import somename
你创建与标识符somename
(所以你可以稍后例如somename.funcname
使用它)的模块对象。当然module-name
不是一个有效的标识符,因此是一个有效的特殊语法。
你不明白为什么模块名称不是有效的标识符?
别担心 - 我也没有。这里有一个提示可以帮助你:看看这条python行:x=var1-var2
。你是否看到作业右侧的减法或带有短划线的变量名?
PS
没有原来在我的答案,除了包括什么,我认为是所有其他的答案信息最相关的位在同一个地方
这个问题与风格无关,它是一个_syntax_ _error_ – hop 2009-04-19 00:09:34
如下图所示,可能仍然有一个带有这个名字的文件,所以风格指南非常相关。 – 2012-11-19 22:08:53