在导入Python文件时使用连字符可以吗?
基本上,当我有一个像这样的Python文件:
python-code.py
然后我使用:
import (python-code)
解释器给我报了语法错误。
有没有什么办法可以解决这个问题?在Python文件名中,连字符是非法的吗?
7 个回答
简而言之
使用连字符(-)在文件名中并不是违法的,但有三个原因你最好不要这样做:
- 你需要特殊的语法来导入带有连字符的文件
- 大家都不习惯模块名里有连字符
- 这违反了Python风格指南的推荐
如果你确实需要导入一个带有连字符的文件名,特殊的语法是这样的:
module_name = __import__('module-name')
想知道为什么需要特殊语法吗?
需要特殊语法的原因是,当你写 import somename
时,你是在创建一个名为 somename
的模块对象(这样你可以后续用 somename.funcname
来使用它)。当然,module-name
不是一个有效的标识符,所以需要用特殊语法来给出一个有效的标识符。
不明白为什么 module-name 不是有效的标识符?
别担心,我当时也不明白。这里有个小提示:看看这行Python代码:x=var1-var2
。你能在赋值的右边看到减法操作,还是看到一个带有连字符的变量名呢?
附言
我的回答没有什么新意,只是把我认为最相关的信息从其他答案中整理到了一起。
你代码中还有一点需要注意的是,import 不是一个函数。所以 import(python-code)
应该写成 import python-code
。有些人已经提到过,这样写会被理解为“导入 python 减去 code”,而不是你想要的效果。如果你真的需要导入一个名字里有连字符的文件,可以这样做:
python_code = __import__('python-code')
不过,正如上面提到的,这种做法其实并不推荐。如果这个文件名是你可以控制的,最好还是改一下文件名。
你应该去看看 PEP 8,这是关于Python代码的风格指南:
包和模块名称:模块的名字应该简短,并且全部使用小写字母。如果用下划线能让名字更容易读,那可以用下划线。Python的包名也应该简短,全部小写,不过不太建议使用下划线。
因为模块名会和文件名对应,而有些文件系统对大小写不敏感,并且会截断长名字,所以模块名最好选得比较短。虽然在Unix系统上这不是问题,但在老版本的Mac、Windows或者DOS上可能会出现问题。
换句话说:给你的文件改个名字吧 :)