generated at
Python
multiline string の改行を除くイディオム
multiline.py
''' hello '''[1:-1]

部分適用
functools.partial で一部の引数を埋めた関数を返す

func.__qualname__
クラス名等がついた関数名をゲットできる

bytes を書く
open(path, mode="bw") のように b が必要、デフォルトは str を書く
file.write(str(bytes_content)) は単に b'content' のような文字列が出力される
byte mode で開いたファイルに string を書いても空

first
next(filter(iterable, lambda x: x ..., None)
久々にさわると iterator の感じを忘れててめちゃ困ってしまう

pyenv install / pipenv --python 失敗
CONFIGURE_OPTS="--with-openssl=$(brew --prefix openssl@1.1)" CFLAGS="-I$(xcrun --show-sdk-path)/usr/include" pyenv install 3.8.5
pyenv の python-build が brew に openssl あれば見てくれてないかなあ

リテラルとして解釈する
eval より安全、Spreadsheet のセルにたまに list 書いたりする時に便利...
ast.literal_eval("[1,2,3]") # => [1, 2, 3]

repl で readline が効かない
$ pip install gnureadline

Poetory
poetry update は pyproject.toml の制約を超える更新はしない
狙ったモジュールを更新するには poetry add module@latest とかする

json.dumps で unicode を \u 形式にしない
json.dumps(..., ensure_ascii=False)

line.encode('ascii').decode('unicode-escape')

map しつつ first
next(filter(None, map(lambda k: d.get(k, None), keys), None)
filter(None, itr) で lambda 省略して falthy な値を除く

C-c で死なないやつ
sleep はさみつつなんかやってる時に殺せなくて困ったことがある
signal を trap して終了させるためにこれ書いておく、他の SIG もハンドルするには同じような感じでやる
signal.signal(signal.SIGINT, lambda s, f: exit())

ロードした module を再ロードさせる
sys.modules にモジュール名を key としたオブジェクトが入っている
foo foo.bar などパスごとなので、prefix で del していく
clear.py
import sys for key in list(sys.modules.keys()): if key.startswith('name'): del sys.modules[key]

unittest.patch が

ruff
今は ruff らしい

src/ 作るかどうか
sys.path src/ を明に通したりインストールする必要がある
それがめんどいので Editable Installs がある
? `.venv/lib/python3.11/site-packages/_<module>.pth` が配置されたりするのはこれ?
ローカルの Docker で動く Jupyter Notebook からカレントディレクトリの src 以下をロードしたい、なども明に追加する or PYTHONPATH=/mounted/src みたいな感じで環境変数で渡すかなあ

VSCode
2023/11/29 今はこっち
python.linting.enabled 等 deprecated になっている

editable install
pip install -e . のやつ