初めてのPythonを読んでみる(2)

章番号だけだとあとで見たときにわかりにくいので、せめて章タイトルくらいは書くことにしよう。

    • 4.2
      • 機能面、パフォーマンス面、可読性などの点から、なるべくビルトインオブジェクトを使うべき
>>> 3+4j
(3+4j)
>>> (1+j)(1-j)
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
NameError: name 'j' is not defined
>>> 1+j
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
NameError: name 'j' is not defined
>>> 1+1j
(1+1j)
>>> (1+1j)(1-1j)
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
TypeError: 'complex' object is not callable
>>> (1+1j)*(1-1j)
(2+0j)
>>> int((1+1j)*(1-1j))
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
TypeError: can't convert complex to int; use int(abs(z))
>>> abs((1+1j)*(1-1j))
2.0
>>> 1j
1j
>>> 1j**2
(-1+0j)
      • 8進数、16進数、浮動小数点などの表記は他の言語と同じっぽい
      • 長整数は無限精度 (メモリの許す限り)
      • 本格的な数値計算をやるなら NumPy というエクステンションがあるのでそれを使うと良い
    • 4.5
      • 入力をカンマで区切って与えると、タプルができる
      • 小数の出力などで、インタラクティブシェルの自動出力機能と print の出力結果が異なることがある(repr と str の違いに一致する)
>>> 1,2,3
(1, 2, 3)
>>> 2+3, 2-3, 2*3, 2/3, 2**3, 2//3
(5, -1, 6, 0, 8, 0)
>>> 2.0/3
0.66666666666666663
>>> print 2.0/3
0.666666666667
>>> repr(2.0/3)
'0.66666666666666663'
>>> str(2.0/3)
'0.666666666667'
      • / による除算は Python 3.0 以降では小数点以下の切捨てを常に行わないようになる
      • 現行バージョンでも from __future__ import division すれば動作確認可能
>>> 5 / 2
2
>>> from __future__ import division
>>> 5 / 2
2.5
    • 4.6
      • 変数とオブジェクトは、メモリ中の違う部分に格納され、リンクされる。このリンクを「リファレンス」という
      • 変数はポインタで、実体はヒープにあるってことを言っているのだろうか? → Pythonのリファレンスは、Cで言えば、あらゆる型に即座に対応できる void* ポインタのようなもの、と考えると分かりやすい
      • 整数オブジェクトは immutable (そりゃそうだろうな)
      • リストは mutable (可変オブジェクト)
>>> L1 = range(0,4)
>>> L2 = L1
>>> L2
[0, 1, 2, 3]
>>> L1[0] = 10
>>> L2
[10, 1, 2, 3]

インタラクティブシェルで動作確認&メモしながらだと意外と時間かかる・・・。