传统上1e3
表示10**3
。
>>> 1e3
1000.0
>>> 10**3
1000
类似案例exp(3)
与e**3
相比。
>>> exp(3)
20.085536923187668
>>> e**3
20.085536923187664
但是现在注意指数是否为float
值:
>>> exp(3.1)
22.197951281441636
>>> e**3.1
22.197951281441632
哪个好。现在是第一个例子:
>>> 1e3.1
File "<stdin>", line 1
1e3.1
^
SyntaxError: invalid syntax
>>> 10**3.1
1258.9254117941675
显示Python
也不喜欢1e3.1
,Fortran
。
无论它可能是标准(!)为什么会这样?
答案 0 :(得分:13)
e
的符号是一个数字文字,是许多编程语言的词法语法的一部分,基于标准格式/科学记数法。
此表示法的目的是允许您通过移动点位置来指定非常大/小的数字。它并不打算允许您将10的任意幂乘法编码为数字文字。因此,该点和后续数字甚至不被识别为数字文字标记的一部分。
如果您想要任意权力,正如您所发现的那样,有数学函数和运算符可以完成这项工作。与数字文字不同,您甚至可以在运行时确定参数值。
答案 1 :(得分:4)
您似乎将文字的语法与运算符混为一谈。虽然你可以声称1e3.1遵循你的“约定”,但应该很清楚1e3.1不是Python interpeter的有效文字表达式。该语言具有定义的标准语法,并且该语法不支持浮点文字表达式作为其数字文字的“指数”。
Python数字文字中的“e”不是运算符(不超过小数点)。所以你期望Python的文字语法应该支持一些“约定”......基于你已经认定的某种模式......并不是特别合理。
答案 2 :(得分:3)
来自docs:
sign ::= '+' | '-'
digit ::= '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
indicator ::= 'e' | 'E'
digits ::= digit [digit]...
decimal-part ::= digits '.' [digits] | ['.'] digits
exponent-part ::= indicator [sign] digits #no dots allowed here