4

按照惯例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.1Fortran不管它可能是一个标准(!)为什么会这样?

4

3 回答 3

13

带有 的符号e是数字文字,是许多编程语言词汇语法的一部分,基于标准形式/科学符号。

该符号的目的是允许您通过移动点位置来指定非常大/小的数字。它并不是为了让您将乘以 10 的任意幂的乘法编码为数字文字。因此,该点和后面的数字甚至不被识别为数字文字标记的一部分。

如您所见,如果您想要任意幂,则可以使用数学函数和运算符来完成这项工作。与数字文字不同,您甚至可以在运行时确定参数值。

于 2013-05-11T04:52:50.413 回答
4

您似乎将文字的语法与运算符混为一谈。虽然您可以声称 1e3.1 遵循您的“约定”,但应该很清楚 1e3.1 不是 Python 解释器的有效文字表达式。该语言具有定义的标准语法,并且该语法不支持浮点文字表达式作为其数字文字的“指数”。

Python 数字文字中的“e”不是运算符(比小数点更重要)。因此,您期望 Python 的文字语法应该支持某种“约定”……基于您猜到的某种模式……并不是特别合理。

于 2013-05-11T04:52:36.227 回答
3

文档

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  
于 2013-05-11T04:57:15.937 回答