python3の日記

Python3を図書とともに勉強していくブログ

【初めてのPython(第5章)】数値

f:id:pokita:20180426195830j:plain

5.1.1

ビルドインオブジェクトである数値の話。数値オブジェクトと一概に言っても、実はそんなもの存在しなくって、数値リテラルを持ったそれぞれ異なるオブジェクトに過ぎない。123は短整数型、1,23は浮動小数点型、という具合に。

 

5.2

数値リテラルを持つ者同士は、ビルドインツールである、演算子や数学系の関数、ユーティリティーモジュールで扱えるとうサービスも充実している。また、式中で型が混在したときはより型が複雑な方に合わせてくれるというアフターサービス付き。

a = 12 #int
b = 2,2 #float
c = a + b
print(b,type(b))
>>>14,2,float

数値リテラル同士の式でなければ通常、こうした型合わせは行われない。

a = 12 #int
b = "spam" #str
print(a + b)
>>>TypeError: unsupported operand type(s) for +: 'int' and 'str'

5.2.4

演算子オーバーロード、これはまた憎きオブジェクト指向の話。簡単に訳すると、+ や-といった演算子がどういう働きをするかも、オブジェクトごとに再プログラミングすることができるということ。

 

5.3.3

なんだこれ…はよ3.0完全対応表記で書いて…ってことば漏れた。けどここがけっこう重要。除算を含む計算においては、切り上げが行われるか、四捨五入が行われないか、で計算結果が大きく変わるからだ。

print(1//2)
>>>0 #0.5が切り下げられて(下に寄せる)0になる
print(1//-2)
>>>-1 #-0.5が切り下げられて(下に寄せる)0になる
print(int(0.5))
>>>0 #0.5が切り下げられて(絶対値に寄せる)0になる
print(int(-0.5))
>>>0 #-0.5が切り下げられて(絶対値に寄せる)0になる

5.3.4

なんか難しそうだな、と思ってたビット演算。そうしたら一言「Pythonのような高レベル言語では扱うことはまずないので無視してOK」とのこと。将来、使う必要が出てしまったときにまた学び直すことにする。数学パズルが好きな人はやっていいかもね。

 

5.3.7

8進数16進数も特に使う予定がないので、なんとなく「こういうのもあるんだな~」くらいの理解で読み飛ばした。ただし、「数値リテラルの先頭を0にすると8進数になる」ということには注意が必要。

VBなんかをやっていると、「数字を必ず8桁で入力(先頭0詰め)」なんてのがよくあったので、その感覚で0を付けちゃうと8進数になってしまう。

 

 5.4.1

Pythonは小数点同士の計算に弱い。

print(0.1 + 0.1 + 0.1 -0.3)
>>>5.551115123125783e-17

なにこれ……???浮動小数点数の演算には限界があるという話。なるべく使うのは避けたほうがいいかも。一応Decimalっていうモジュールも紹介されているけど、そこまでして小数取り扱いたくはないかな。

 

 5.4.2 

setオブジェクトについてはこれ!

python3.hatenadiary.jp

 5.4.3

boolオブジェクトについては詳しくは9章で。

 

【この章の気付き】特に小数計算や除算の切り下げ等について言える話だけど、どういう風に丸められた数字が出力される把握することが、とても大切だと気づいた。