Python 言語について 新しく知った 9つのこと
Python の初心者です。
Pythonによるデータ分析入門(第二版) の第二章に Python 言語について書かれていた内容から、自分にとって新しい発見が多かったので、それを列挙します。
既に Python を学んだことがある方にとっては、常識的な内容かと思います。
1. インデントは 4つの空白で
自分は 2つの空白でよく書いてますが、4つがスタンダードらしいです。
2. セミコロンを使えば、複数の変数を1行で定義できる
a = 5; b = 6; c = 7
Java のように各行の最後に ; を置く必要はないですが、あえて置くことで、このような定義が可能になります。
しかし読みづらいので、特に推奨はされないですね。
3. すべてのものがオブジェクトである
Python の開発者が好きな言葉らしいですが、これが意味することについては、まだ理解できていないです。
恐らく、以下の記事を読んだほうが理解が深まりそうです。
http://blog.lerner.co.il/pythons-objects-and-classes-a-visual-guide/
4. リストの場合 a = b は値のコピーではなく、参照先のコピーである
a = [1, 2, 3] b = a a.append(4) b # -> [1, 2, 3, 4]
a の値を変更すると、b の値も変更されている。
すなわち a と b が参照している値は同じである。
リストの場合だけではないかもしれませんが、とりえあず。
5. 関数に渡す引数がリストの場合も値のコピーではなく、参照先のコピーである
def append_element(list, element): list.append(element) data = [1, 2, 3] append_element(data, 4) data [1, 2, 3, 4]
data を append_element に渡し、関数内で演算後、呼び出し元で data の値を見てみると、関数内で演算した内容が反映されている。
すなわち 関数に渡した data と元の data が参照している値は同じである。
こちらもリストの場合だけではないかもしれませんが、とりえあず。
6. 暗黙の型変換は明らかな場合のみ
a = 4.5 b = 2 a / b # -> 2.25
float と int の計算時には暗黙的に変換してくれます。
a = 2 b = "m" print(a + b) --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-41-827396fae8f4> in <module>() 1 a = 2 2 b = "m" ----> 3 print(a + b) TypeError: unsupported operand type(s) for +: 'int' and 'str'
int と str をつなげようとしても、エラーになります。
Java などでは、自動的に int が str に変換されて処理してくれますが、python ではより厳密に型について考えられているようです。
7. isinstance(value, type) で型のチェックができる
a = 5 isinstance(a, int) # -> True a = 5 isinstance(a, str) # -> False
何の型かを調べるなら、type(a) で "int" が得られます。
8. Duck typing
“If it walks like a duck and quacks like a duck, then it’s a duck.”
"もしそれがアヒルのように歩き鳴くのであれば、それはアヒルだ。"
以下の例で言うと、、
def isiterable(obj): try: iter(obj) return True except TypeError: # not iterable return False
もし、そのオブジェクトからイテレータを作成できるのであれば、それは iterable である。
当然と言えばそうかもしれませんが、あるオブジェクトの型そのものは気にしなくても、その特性について意識する場合、こういったチェックが必要になってくるのだろうと思います。
"Duck typing" について、何となく分かったような気もしますが、まだぼんやりとしています。
9. 値の比較は ==, オブジェクトの比較は is
a = [1, 2, 3] b = a b == a # True b is a # True
b と a は値も参照先も等しい。
a = [1, 2, 3] c = list(a) c == a # True c is a # False
c と a は値は等しいが、参照先は異なる。
所感
細かい点を含めると、一節を読んだだけでも知らないことがたくさんでてきますね。
また、読んだときには分かったような気になってても、忘れてしまうことも多いので、繰り返し練習しながら理解を深めていきたい。