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-01etc は数値リテラルです。それらは、スクリプトが実行される前に表示され、トークン化されます。そして、そのような数の規則は、ほぼ確実に「オプション ('E' または 'e' の後にオプションの '+' または '-' が続き、その後に数字が続く)」と述べています。その定義には変数の規定がなく、定義を変更すると、実行時まで数値リテラルを解析できなくなり、非常に複雑になります。

于 2012-12-20T06:44:04.647 に答える
2

浮動小数点リテラルについては、Python ドキュメントを確認してください。

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

秘訣は、数値リテラルには記号が含まれていないことです。-1 のような句は、実際には単項演算子 - とリテラル 1 で構成される式です。したがって、ここでは、 は指数付きの数値ですが、式でiは変数と見なされます。そして、指数部分なしで終了します: . これは無効な Python トークンです。x - ixx1e

于 2012-12-20T06:47:25.157 に答える
1

floatリテラルに変数を含めることはできません。実行時まで評価できないため、無効なリテラルです1e-3。when isに評価されることを1e-i期待するようなものです。リスト内包表記とは何の関係もありません。x.143.14x3

解決策はあなたが見つけた通りです。

于 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 に答える