Python
multiline string の改行を除くイディオム
code:multiline.py
'''
hello
部分適用
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 あれば見てくれてないかなあ
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 していく
code:clear.py
import sys
for key in list(sys.modules.keys()):
if key.startswith('name'):
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 になっている