为什么模块名中的连字符会导致语法错误?
我在使用 Python 2.6 时,导入一个模块时遇到了以下问题:
File "./test-nmea-uploader.py", line 11
import nmea-uploader as sut
^
SyntaxError: invalid syntax
这是为什么呢?Python 的风格指南似乎没有提到在名称中使用连字符,但却建议使用下划线。
艾伦
4 个回答
6
在Python中,字符 -
是一个运算符,所以你不能把它用在变量名里。
详细信息可以查看 Python v2.7.2 文档中的词法分析。
8
标识符不能包含连字符。这不是风格问题,而是语言语法的一部分,具体可以参考 这个链接
标识符(也叫名字)是通过以下的词法定义来描述的:
identifier ::= (letter|"_") (letter | digit | "_")*
letter ::= lowercase | uppercase
lowercase ::= "a"..."z"
uppercase ::= "A"..."Z"
digit ::= "0"..."9"
16
根据这个链接,任何标识符(也就是变量名、函数名等)必须以字母(大写或小写)或下划线开头,并且可以包含字母、数字或下划线。
包名也是标识符,所以它们也得遵循这些规则。
另外,nmea-uploader
这个名字可能还意味着从nmea
中减去uploader
。因为在Python文件中的任何地方都可以导入一个包,如果你提前定义了nmea
和uploader
这两个变量,解释器就会搞不清楚,如果允许用连字符来命名标识符的话,会造成混淆。