为什么下面的减号被视为无效令牌?这里肯定有一些我不理解的东西。
>>> [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]
答案 0 :(得分:7)
1e-01
等是数字文字。在脚本运行之前,它们被看到并被标记化。这个数字的规则几乎肯定会说“可选('E'或'e',后跟可选的'+'或' - ',后跟数字)”。在该定义中没有提供变量,并且更改定义会使得数字文字无法解析直到运行时,这将变得非常毛茸茸。
答案 1 :(得分:2)
查看floating-point literals的Python文档:
floatnumber ::= pointfloat | exponentfloat
...
exponentfloat ::= (intpart | pointfloat) exponent
...
exponent ::= ("e" | "E") ["+" | "-"] digit+
诀窍是数字文字不包含符号;像-1这样的短语实际上是由一元运算符和文字1组成的表达式。
因此,i
此处被视为x - i
表达式中的变量,即使x
是带指数的数字。它会使x
没有指数部分:1e
。哪个是无效的Python令牌。
答案 2 :(得分:1)
您不能在float
字面值中包含变量。 1e-3
很好,1e-i
直到运行时才能被评估,因此是无效的文字。当x.14
为3.14
时,期望x
评估为3
。与列表推导无关。
解决方案正如您所发现的那样。
答案 3 :(得分:1)
1e-i
不是有效的Python语法。指数形式是文字,因此不是动态的。词法分析员说:invalid token
,如同,它不知道1e-i
的含义。
答案 4 :(得分: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]