ソフトウェアエンジニアの勉強ログ

興味があるのは、computer vision, three.js, python, 深層学習, emacs

自分用メモ:C,C++経験者がpythonを一から勉強する2(逐次更新)

pythonプログラム

  • import sysのうえ、sys.argvでコマンドラインの入力にアクセスできる
  • import moduleで読み込めるが、module.関数という呼び方をしないといけない
  • from A import functionとすると、使いたい関数を直接importする
  • import long_module_name as hogeみたいな呼び方もできる
  • パッケージという考え方
    • __init__.pyというファイルがあるディレクトリを、パッケージとみなして、import対象なる

辞書の使い方

  • setdefault()関数やdefaultdict()関数を使って、例外のときの値出力を簡単に記述できる
  • Counterによる要素数の計算(from collections import Counter)
  • OrderedDict(from collections import OrderedDict)
  • deque
    • pop, popleft, append, appendleft
  • itertools
    • tertools.chain, itertools.cycle

オブジェクト

  • 継承したときにメソッドは完全にオーバーライドされる
    • 親クラスの処理をしたかったら、super()を呼ぶ
  • メソッドは追加できる
  • property
  • 非公開属性の名前のマンダリング
    • __prop_nameでマンダリングして、@propertyと@var_name.setterでデコレートするのが良さそう。
    • selfとクラス名を使い分けると、クラスで一つの変数を扱うことができる(C++のstaticメンバ変数)
    • @classmethod, @staticmethodを使う(デコレート)
    • vars関数を使うとプロパティがわかる
  • 特殊メソッド
    • 要するにoperatorのオーバーライド
__eq__, __ne__, __lt__, __gt__, __le__, __ge__, __add__, __sub__, __mul__, __floordiv__, __truediv__, __mod__, __pow__, __str__, __repr__, __len__
  • __str__などは便利だろう
  • コンポジションの方がリーダブルなコードがかける。つまり、子メンバー変数にオブジェクトを持つ
  • モジュールはシングルトンとして振る舞う

文字列