コーディング規約
PEP8というのに倣うのがいいらしい
はじめに — pep8-ja 1.0 ドキュメント
パッケージを任意の場所にインストール
Node.jsで言うところの npm install raiburari --save-dev
。
でも、やらないのか? なんかあまり見かけない
検索パスは PYTHONPATH で設定
Pythonは、環境変数 PYTHONPATH
に設定されたパスからモジュールを探す。
↓こういう位置関係のときに……
PYTHONPATH
に何も設定しない場合、main.py
から全て import
するには↓こうなる。
ここで PYTHONPATH
に lib
を設定した場合、同じものを↓こう書けるようになる。
[構文] nullじゃなくてNone
null
じゃなくて None
。is None
, is not None
で判定。
[構文] インクリメント・デクリメント演算子
無いから += 1
/-= 1
でやる
[構文] 普通の (インデックス番号での) ループ処理
私が思ってる普通の for
ループは無い。range()
を使う。
[構文] for ... else, while ... else
for
/while
のあとに else
を書くと、for
/while
の条件が False
になった後の処理を書ける。1回目で False
になっても通る。
[構文] 例外処理
[変数] 変数のスコープ
if
の中とか try
の中で定義した変数は外に出ても残ってる
[関数] 引数の初期値とキーワード
[クラス] 基本
[クラス] メソッドのオーバーロード
無い
[文字列] ヒアドキュメント
長い文字列リテラルの定義にはヒアドキュメントや('...' '...')が便利 - Qiita
[文字列] %ってなに?
文字列のフォーマットするやつ
でもPython3なら .format
を使ったほうがいいらしい
Pythonの%演算子による文字列フォーマット - Qiita
これでもいい
Python, formatで書式変換(0埋め、指数表記、16進数など) | note.nkmk.me
[文字列] substring
[文字列] 大文字⇔小文字
[文字列] 正規表現
re
を使う。
「含まれているか」が知りたいなら re.search()
を使う。re.match()
は先頭から一致してないとマッチしない。
正規表現で置換するなら re.sub()
を使う。マッチする箇所全て置換される。
何回も使うような正規表現は事前に re.compile()
でコンパイルしておける。
[数値] 整数の乱数
※これだと10000を含むので注意
9.6. random — 擬似乱数を生成する — Python 3.6.5 ドキュメント
[リスト] リストのループ処理
[リスト] インデックスの有無判定
ずばりそういうのは無い リストの長さと比較するしかない
[リスト] リスト同士を結合
list1.extend(list2)
すると、list1
に list2
を結合できる
元のリストを壊したくなかったら +
を使う
[リスト] 辞書のリストを特定のキーでソートする
list.sort()
に関数を渡せばできる
なお上記はlambda式使ってるが、以下と同じ
[辞書] キーにクォートは必須
わすれるな
[辞書] キーに変数を使う
ていうかクォート忘れるとそうなる
[辞書] キーの有無判定
in
, not in
で判定する
[辞書] キーの有無判定しつつ値取得
dict.get()
使う
[辞書] キーを除去
del
で消せる。JavaScriptの delete
みたいな
[辞書] 辞書同士を結合
dict.update()
ただし元の配列が変化するので注意
Python3.9以降なら |
演算子でできる
[辞書] 辞書をコピー
dict.copy()
でできる
ただし入れ子になってて別の辞書を参照してる場合、別の辞書の値はコピーされず、そちらは参照のまま。
ディープコピーしたければ以下参照
Python3.7 辞書をclone (ディープコピー) - キリウ君が読まないノート
[辞書] 辞書のループ処理
dict.items()
, dict.keys()
, dict.values()
[日付] 現在日時を文字列で取得
[日付] 日時の計算
8.1. datetime — 基本的な日付型および時間型 — Python 3.6.5 ドキュメント
[日付] ISO8601