0

ちょっとしたバックグラウンド: 私は O'Reilly の「Learning Python」という本を通して Python を学んでいます。私は Java の経験がいくらかあります。

とにかく、第 5 章を読んで (実際にはまだ途中です)、Python が混合数値式の結果を処理する方法に関する質問に出くわしました。この本の中で、彼らは整数と浮動小数点数 (40 + 3.14) を混合する例を使用し、Python がオペランド最も複雑なオペランド。

私の質問は次のとおりです。プログラマーは、どの数値オペランドが最も高いかを覚えて、結果がその形式に「アップ」されることを覚えておく必要があるのではなく、結果の型に対して特別な数値リテラルを作成する方が簡単ではないでしょうか?

私の論理は次のとおりです。式に小数点以下の桁がある場合、それは浮動小数点数になることがわかります。3 + 4j のようなものがある場合、それは複素数になることがわかります。結果がどのように扱われるかを知るためだけに、数値リテラルの階層を覚えておく必要があるのはなぜですか? 私の意見では、式に混合数値があるかどうかに関係なく、特定のデータ型として扱われることを知るために、結果を単一の情報に基づいていないリテラルに割り当てる方がはるかに簡単なプロセスのように思えます。

フォローアップの質問: この種のことが現在実行されている言語はありますか?

繰り返しますが、私の Python に関する知識は限られているため、これはばかげた質問かもしれませんが、なぜプログラマーがこのプロセスを実行しなければならないのかを知りたいと思います。なんらかのシステムがまだ導入されていないと私が想像できる唯一の理由は、結果の特定の Numeric Type が他の言語 (Java) ほど重要ではないからです。

4

3 に答える 3

5

「式に小数点以下がある場合、それは浮動小数点数になることがわかります。3 + 4j のようなものがある場合、それは複素数になることがわかります。」

それ「数値リテラルの階層」です。あなたがこれ以上何を望んでいるのかよくわかりません。さらに、結果は常にnumbers.Numberのサブクラスになるため、結果のオブジェクトがどのタイプになるかについて、実際にはある程度の保証があります。

于 2009-08-13T07:08:18.077 に答える
2

統一された数値型があり、次のステートメントを入力したとします。

a = 42
b = 42.24
c = 4 + 2j

これは、今日得られるものとどのように違うでしょうか?

これはすでに有効な Python です。唯一の違いはtype(a)type(b)type(c)return intfloatおよびcomplexであり、それらすべてが のようなものを返すことを望んでいると思いますnumber。しかし、あなたが望む/しなければならない場合を除いて、実際にそれに対処することは決してありません。

策略的な数値塔のようなものを持っているのには理由があります。itneger のみを扱っていることがわかっている場合は、整数計算にハードウェアを利用できます。intまたは、何らかの種類のユーザー入力を整数に制限したいことがわかっている場合 は、型から派生させることができます。

ある種の統一された数を持つ型システムを持つ言語を見つけることができると確信しています。しかし、私はあなたの主張を理解できたかどうか確信が持てません。おそらく私はあなたの質問で何かを見逃しましたか?

于 2009-08-13T07:17:27.090 に答える
0

私が本当に質問を理解したとは思わないでください:

  1. 演算結果を明示的に指定する必要があるということですか。あなたは明示的なキャストでそれを行うことができます

    フロート(1+0.5)

    int(1+0.5)

    複素数(1+0.5)

  2. 演算子は同じ型のオペランドのみを受け入れる必要があるということですか?

    1+2

    1+0.5 -> 例外が発生します

    1+int(0.5)

    float(1)+0.5

    理にかなっていますが、冗長になりすぎて int->float キャストが常に成功し、精度の低下につながることはありません (非常に大きな数を除く)。

  3. 戻り値の型ごとに異なるオペランド:

    1 + 0.5 -> 整数

    1 `float_plus` 2 -> float

    明示的なキャスト機能を複製し、まったく病気です

于 2009-08-13T08:09:22.463 に答える