目次:
まえがき
この記事の目的は、Python3に習熟するべくPythonのドキュメントを読み実行し試している。今回の記事では様々な組込型を網羅的に取り上げ、その動き方や特徴に触れていきたい。内容としてはドキュメントを読みながら確認していくだけなので単なる読み合わせの会。
よく使われるものについては別記事で詳しく取り上げるが、その前に一通り確認しておきたい。
変更履歴
- 新規作成・・・2020/02/23
この記事の開発環境
- バージョン: Python3.8
- IDE: spacemacs
- ライブラリ: 標準モジュール
- 環境構築: pyenv、pyenv-virtualenv
- OS: macOS
Python3の組込型の一覧
- 真理値 ・・・TrueとFalse
- イテレータ型 ・・・__iter__()
- 数値型 ・・・123
- シーケンス型 ・・・list, tuple, range
- テキストシーケンス型 ・・・str
- バイナリシーケンス型 ・・・bytes, bytearray, memoryview
- 集合型 ・・・set, frozenset
- マッピング型 ・・・dict
- コンテキストマネージャ型 ・・・よくわからんやつ。
- 特殊属性
真理値
他の言語同様TrueとFalseがある。 どんなオブジェクトでも真理値として判定できる。またオブジェクトはデフォルトではTrueを返す。if文やwhile文でよく使うので結構重要。TrueとFalseとNoneは組込定数ともいう。
オブジェクトが判定される時、Falseとなる場合以下の通り。
- NoneかFlase
- 数値型における0
- 空のシーケンス、コレクション
他にはクラスが、__bool__()でFalseを返す定義をしている時が挙げられる。
イテレータ型
__next__()を定義したクラスのオブジェクトが外部イテレータとなる。__iter__()がイテレータを返す。またアンダースコア2つで囲まれた関数は特殊関数と呼ばれる。これに関してはまた別の記事で詳しく取り上げたい。
呼び出し方は直接呼び出すのではなく、iter()やnext()を使う。繰り返しを終わらせるには、StopIterationという例外を送出する。これはエラーにならない例外でfor文やwhile文の中で送出すると必ず繰り返し処理を終えることになる。
そもそものイテレータの意味は、コンテナやコレクションの各要素に対する繰り返し処理のことである。
ジェネレータ型
pythonにはジェネレータ型と呼ばれるものがある。Wikiによると「一種のコルーチンを記述できる」との事だがこのジェネレータもイテレータを返すものらしい。
yield文なるものでnext()つまり__next__()で実行される処理を簡単に記述できる。そうだ。Wikiのパクリだが例文を載せておこう。
def car_generator(): yield 'Ford GT 40' # 最初の __next__() によりここまで実行され 'Ford GT 40' を返す yield 'WRX' # 次の __next__() によりここまで実行され 'WRX' を返す yield 'Lexus LC F' # 3回目の __next__() によりここまで実行され 'Lexus LC F' を返す for car in car_generator(): print(car) cg = car_generator() print(next(cg)) print(next(cg)) print(next(cg)) print(next(cg)) # この行で StopIteration 例外になる
数値型
数値型は数値リテラルを代入するか、関数や演算子の返り値として作られる。int型、float型、complex型がある。またpythonでは複素数を組み込み型としてサポートする。
虚数はリテラルにjかJを付けて宣言する。文字列や整数を複素数に変換するcomplex()がある。
complex(rel, img)relが実部で、imgが虚部。なるほどわからん。
シーケンス型
list型、tuple型、range型がある。順序があるもの。
テキストシーケンス型
いわゆる文字列。文字列で何ができるかは別の記事をどうぞ。
バイナリシーケンス型
bytes型、bytearray型、memoryview型がある。バイトオブジェクトはほぼ文字絵と同じように宣言できて、クォートの前にbを付けて、b”iPhone”という形で作れる。
bytes型を使ったことがないのでよくわからないが、必要になったら調べよう。そうしよう。
集合型
順序のないリストのようなもの。数学で言う集合を扱える。set型とfrozenset型がある。set型はミュータブルなのでメソッドによって内容を変更でき、ハッシュ値を持たないので辞書などのキーとして使えない。
一方、frozenset型はイミュータブルで変更はできないが、ハッシュ値を持つので辞書などのキーとして使える。
マッピング型
dict型のみ。ハッシュ可能なオブジェクトをキーに対応づける。キーには文字列や数値などの他、前述してきたハッシュ値を持つものが使える。
コンテキストマネージャ型
正直何のことかわからん。が、Pythonドキュメントに出てくるwithはわかる。
withを使う時、ファイルを開いて読み込むと言うことができる。処理はファイルを開いて処理して閉じると言うことが必要になるが、withを使うとかなり簡略された構文でこれができる。
その簡略された構文がコンテキストマネージャなんじゃないかとかって思っている。(笑)
特殊属性
いくつかのオブジェクトに対して読み出し専用の属性がある。
よく使われる、if__name__ == “__main”__:の__name__などがこれにあたる。これが定義されていると、クラスの名称がmainだった場合に続きの処理が行われることになる。
クラスが他のクラスからインポートされた時に、インポートと同時に実行されるのを防ぐために書かれることが多い。単純な実行では__name__は__main__という文字列になるので、インポートされた時は違うので、実行はされない。
むすび
この記事では簡単に取り上げてみた。実際にはPythonドキュメントにはもっと多くのことが、というか多分すべてのことが書かれている。別の記事でパスワードマネージャを作ることになっていて、設計はとりあえずできたので、一旦、Pythonの基本を網羅的に目を通し動かして確認していきたい。
次は基本構文をやっていこうと思う。
コメント