__len__ や __iter__ など) を実装することで、それらを利用する組み込み関数( len(obj) や for v in obj ) が生きるダックタイピング
__メソッド__ は特殊メソッド、Dunder(Double underscore, ダンダー)メソッド と呼ばれるnonlocal でdel 名前 で名前空間から削除できるdir(obj) で obj 内のシンボルを確認できる
import builtins; dir(builtins) で表示できる_helper() のようにシンボル名をアンスコから始める慣習があるループに else を指定すると、ループが全て走りきった場合だけ実行できる
if - elif - else
プログラムを終了するときは raise SystemExit() する
atexit.register(関数) でインタプリタ終了時にフックして関数を呼べる
コマンドライン引数は sys.argv 、複雑なことやるなら argparse モジュールで!
構造的パターンマッチ match - case
order = ("beer", "IPA") # ビールの注文
# order = ("food", "Pizza") # フードの注文
match order:
case ("beer", beer):
print(f"ビール「{beer}」をお持ちしました")
case ("food", food):
print(f"フード「{food}」を召し上がれ")
b"Value is %0.2f" % 4.54 bytes/bytearray はこんな感じ
環境変数は os.environ
標準入出力系は sys.stdin sys.stderr sys.stdout を使う。これらをファイルオブジェクトに置き換えることができる
slice も range も begin, end なインデックス指定。end は含まれない
>>> "hello"[-1]
'o'
>>> "hello"[-6]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: string index out of range
>>> "aiueo"[-3:-1]
'ue'
>>> "aiueo"[:]
'aiueo' # これはシャローコピーを返すのにも使える
>>> "aiueo"[-3:]
'ueo'
>>> "aiueo"[:-2]
'aiu'
変更系メソッド
list.append(v) #末尾に挿入
list.extend(iterable) #末尾に展開して挿入
list.insert(i,v) # v が i番目の要素となるよう(i-1 と i の間に) v を挿入
list.remove(v) # 値が v と等しい最初の要素を削除する
list.clear() # リストの要素を全て取り除く。 del list[:] と等価
list.sort(key=None, reverse=False) # ソートする
list.reverse() # 逆順に入れ替える
# これらは値を返してくれない。悲しい None ...
list.pop(i=-1) # i番目の要素を削除して返す
list.index(v start=0 end=-1) # 値が v と等しい要素のインデックスを返す。start-end は スライスと同じ
list.count(v) # 値が v と等しい要素の数を返す
list.copy() # シャローコピーを返す。 list[:] と等価
# Stack
list.append(v)
list.pop()
# Queue
list.append()
list.popleft()