I ♥ WordPress

[Python勉強日記:003] Pythonにおける数値の扱い
2007/11/03 02:15 posted by kunkichi

昨日は朝から体調が悪く、仕事から帰るなりそのまま布団に直行、というわけで、「毎日やります!」というのも、三日でいきなり挫折していますが(爆)

いや、しんどいながらも通勤時間は読み進めていたのですよ。ただねー、しんどいときってほんと頭に全然入んない(爆)

ということで今日は昨日読んだ4章を再度読み直しました。ここからしばらくはPythonのビルトインオブジェクトに関する章が続くみたい。ビルトインオブジェクトというとわかりにくい印象なんだけど、なんてことはない、数値とか文字列とか配列とかの扱いのお話です。今日は『数値』。

Pythonプログラムの構造

「Pythonではデータは全てオブジェクトとして扱われる」?んー、ピンとこない。とりあえず意識はしておくとして、まずはPythonのプログラム構造をまとめておく。ただしこれは現時点での理解。本を進めていくうちに間違っていることがわかれば都度修正とします。

Pythonプログラムの構造

まとめておくと、今のところ、こんな感じだと思っています。

  • 式を作ることでオブジェクトが生成される。
  • ステートメントは複数の式で構成される。
  • 複数のステートメントを記載したファイルがモジュール。
  • 複数のモジュールを組み合わせて、一つのプログラムとなる。

ビルトインオブジェクト

他の言語同様、Pythonでも予め、数値や文字列、配列などをかんたんに扱えるようなオブジェクトが組み込まれている。でこれらはビルトインオブジェクトと呼ばれ、これらを使うことで標準で大概のことは事足りる上、Cなどで独自のオブジェクトを作成することも出来る。

数値

基本的に他の言語とほぼ同じ。整数、浮動小数点数から8進数、16進数なども普通に使える。+や-などの演算子、absやpowなど数学関数もほぼ同じだし、別のモジュールを使うことで、乱数や丸め処理なども普通に行える。NumPyという高度な演算処理を行う為のライブラリも存在する。

ということで他言語とそんなに変わらないのなら大幅に省略。ちょっと面白いところだけ抜き出し。

4÷5は、phpやperlだと0.8になるけど、pythonの場合はちょっと違う。
>>> 4 / 5
0
え?0?それはないでしょ。ちょっとやり方を変えてみる。
>>> 4.0 / 5
0.80000000000000004
大体、近い数字にはなったけど、、、も一つ違うやり方。
>>> print 4.0 / 5
0.8
やっと正しい結果が出た。

これらが何を意味するかというと、

  • Pythonでは整数同士の計算は整数で返す(なので4/5は0)
  • Pythonでは整数と浮動小数点数など型が異なる数値同士の計算では複雑な方に併せられる(なので4.0/5は4.0/5.0と同じ。で結果は浮動小数点数になる。)
  • 浮動小数点の計算はハードウェアに依存する(1GBは1000MBじゃなくて正確には1024MBだよね、とかってのと同じこと)。よって、2番目の計算式では、それがモロに出ている形。3番目のようにprint文で出力すると人間に取って見やすい形で変換して表示する。

ということで、printを使うほうがベターらしい。

除算、ビット演算、長整数、複素数、16進数、8進数、などについてはあんまり変わらないみたいなのでスルー。あとはビルトインモジュールとビルトイン関数が存在するので、ということぐらいかな。

あー、もうこんな時間、変数については明日にします。

コメント&トラックバック

トラックバックURL





このページの先頭へ