1

为什么下面的减号被视为无效标记?这里一定有什么我不明白的地方。

>>> [1e-i for i in range(-10,10)]
SyntaxError: invalid token

通常这些东西像母亲一样评估:

>>> 1e-10
1e-10

我只是好奇; 我解决了我的问题

>>> [10**i for i in range(-10,10)]
[1e-10, 1e-09, 1e-08, 1e-07, 1e-06, 1e-05, 0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000]
4

5 回答 5

7

1e-01等是数字文字。在脚本运行之前,它们就会被看到并标记化。此类数字的规则几乎可以肯定地说“可选('E'或'e',后跟可选的'+'或'-',后跟数字)”。该定义中没有对变量的规定,并且更改定义会使其在运行时无法解析数字文字,这会变得非常麻烦。

于 2012-12-20T06:44:04.647 回答
2

检查 Python 文档中的浮点文字

floatnumber   ::=  pointfloat | exponentfloat
...
exponentfloat ::=  (intpart | pointfloat) exponent
...
exponent      ::=  ("e" | "E") ["+" | "-"] digit+

诀窍是数字文字不包含符号;像 -1 这样的短语实际上是由一元运算符 - 和文字 1 组成的表达式。因此,i这里被认为是x - i表达式中的变量,即使x是带有指数的数字。它x没有指数部分:1e. 这是一个无效的 Python 令牌。

于 2012-12-20T06:47:25.157 回答
1

float文字中不能有变量。1e-3很好,1e-i直到运行时才能评估,因此是无效的文字。这就像期望x.14评估3.14when xis 3。与列表推导无关。

解决方案如您所见。

于 2012-12-20T06:42:23.290 回答
1

1e-i不是有效的 Python 语法。指数形式是文字形式,因此并非设计为动态的。词法分析器说明了一切:invalid token就像它不知道什么1e-i意思一样。

于 2012-12-20T06:42:49.453 回答
0

正如其他人所提到的,1e-i是无效的。

您可以通过以下方式解决此问题float("1e-%d" %i)

In [114]: [float("1e%d" %i) for i in range(-10,10)]
Out[114]: 
[1e-10,
 1e-09,
 1e-08,
 1e-07,
 1e-06,
 1e-05,
 0.0001,
 0.001,
 0.01,
 0.1,
 1.0,
 10.0,
 100.0,
 1000.0,
 10000.0,
 100000.0,
 1000000.0,
 10000000.0,
 100000000.0,
 1000000000.0]
于 2012-12-20T06:49:47.170 回答