いつものやつです。対応していない値をjson.dumps()に与えるとTypeErrorが発生するやつです。 TypeError 例えばこういうdataclassを定義して。 from dataclasses import dataclass, asdict @dataclass class Point: x: int y: int json.dumpsするとTypeError import json p = Point(x=1, y=2) # TypeError: Object of type Point is not JSON serializable print(json.dumps(p)) default いつもどおりにdefaultを渡してあげる必要があります。ちょっとめんどくさいですが、is_dataclassという関数で調べられるのでどうにかなります。 import json
jsonのencodeエラーについては昔に書いたこの辺を見てもらうとして。 pythonでjson出力する際で対応していない型(e.g. datetime)の値を変換しながら出力したい - Qiita 今回の主題は、json.dumpsに渡すdefaultの関数としてfunctools.singledispatchが有用かもという話。 使いかた singledispatchを利用したモジュールを定義 例えば以下のようなextjsonモジュールを定義してあげる。 extjson.py import json from functools import ( singledispatch, partial, ) @singledispatch def encode(o): raise TypeError("Object of type '%s' is not JSON serializable"
今日は Single-dispatch generic functions (PEP-443)。Generic functionは汎用関数と訳されることも多いが、言語によって微妙に違う使われ方をしている。Pythonでは「引数の型によって動作が異なる複数の関数に同じ名前をつける」という意味合いで使われているようだ。 と書いてもさっぱりわからないので、例示。引数の型によって出力が異なる関数を考える。Generic functionsを使わないとこんな感じ。 def print_func(arg): arg_type = type(arg) if arg_type is int: print("found integer:", arg) elif arg_type is list: print("found list:", arg) else: print("found something:"
Python のパッケージ管理ツールの Poetry の tips です。 ライブラリ: Poetry Poetry はアプリケーション開発とパッケージ開発のどちらの用途にも利用できますが、私はアプリケーション開発でしか Poetry を使ったことがありません。そのため、以下にあげる tips はすべてアプリケーション開発に Poetry を利用するときの tips です。 本記事では Poetry のバージョン 1.0.0 を対象としています。 Poetry は仕様が比較的安定していますが、バージョンが上がると参考にならない場合もあるのでご注意ください。 目次 venv のファイルをプロジェクトディレクトリの下に置きたい venv を作らずグローバルにパッケージをインストールしたい アップデート可能なパッケージをチェックしたい Poetry 自体をアップデートしたい Docker コンテ
この記事はニフティグループ Advent Calendar 2019の14日目の記事です。 昨日は@mito1296さんの「Terraformで立てたec2インスタンスをAnsibleで管理してみる」でした。 同様の問題に以前悩まされたことがあったのでタグ付けは非常に綺麗な解決方法だなと感心しました。 機会があれば、うちのチームでも導入したいですね!! TD;LD Pythonは型安全で無いので大きめのプロジェクトになると心理的な安全が担保できないので敬遠していました。 しかし、Python3.5以降typingが導入されmypyと組み合わせることで、少し大きめのプロジェクトでもコーティングする際に心理的な安全を得ることができるようになったので中規模の開発に採用できるようになりました。 今回は、python3.8からtyping.Protocolが正式に追加されたようなので紹介してみます。
mypyで使えるProtocolが便利という話の例。 structural subtypingをやる際にgoでもほしいと想うことが多かった例がProtocolでは大丈夫なので良いなーという例(今回はそのうちのひとつだけを紹介)。 Protocol? Protocolをいつ使いたくなるかというと、大抵は複数ある何かを同一視したくなった場合。 例えば以下の様な例があげられる。 クラスの継承関係を無視して同様のふるまいを持つものを同一視したいとき ある値を持つものを同一視したいとき 関数とcallable objectを同一視したいとき 同一視した表現を受け取って再帰的に同一視した表現を返したいとき (self-reference) mypyでの型チェックはnominalなので、こういう構造を利用して同一視したい場合にはstructural subtypingが欲しくなる。これ用のinterfa
mypyのdmypyの実装の仕方を把握する。知りたいことは裏側でのprocessの管理の仕方とクライアントとサーバー間のデータのやり取りの仕方。 準備 $ git clone --depth 1 git@github.com:python/mypy エントリーポイントの把握 インストールされるコマンドの確認(setup.py) setup(name='mypy', ... entry_points={'console_scripts': ['mypy=mypy.__main__:console_entry', 'stubgen=mypy.stubgen:main', 'dmypy=mypy.dmypy:main', ]}, data_files=data_files, ... mypy.dmypy:main()がエントリーポイント実際のファイル。 main.py ほとんどargparseを
追記 本記事は当初python3.6 のenumについて書きました。 python3.7 からの機能は以下の通りです、大して変わってないです。 https://qiita.com/ksato9700/items/35a0bdc04693b3b09757#enum 3.8, 3.9, 3.10 が出ましたが、enumについては変更ないです。 3.11 は色々更新がありました。str型と比較できるStrEnumの追加や、制約を検証できるverify()デコレータの追加が大きいです。 前置き enum の機能自体は3.4からありますが3.6になってから追加機能が加えられています。 そこで改めてpython のenum全体をざらっとまとめる記事を書いてみたいと思いました。 参考: 公式ドキュメント https://docs.python.jp/3/library/enum.html 目次 enum
こんにちは、ほけきよです。 pythonでデータを取り扱っているとき「あれ、これどうやるんだっけ??」 ってなること、ありませんか?僕は10分に1回程度なります。 いや、覚えろと自分でも思うんですが、覚えられないんですよね。100回くらい同じコマンドを調べてたりする。 物覚えが良くないので、ココを見れば絶対大丈夫なようにしておこうと思い、まとめてみました。 jupyterで最初に開くときに読み込むモジュールたち datetime 日付⇔文字列の変換 datetimeの足し算引き算 json dict型⇔json jsonファイルの入出力 datetimeをjsonにする時、エラーが出る pandas ~以外を表すやつ andとor inf弾く リストをdfにサクッと変換 datetimeとして読み込み 読み込み時にcodecのエラーが出る DataFrameのfor文 numpy lins
TL;DR 書籍「効果検証入門 正しい比較のための因果推論/計量経済学の基礎」のRソースコードを、Pythonで(ほぼ)再現しました https://github.com/nekoumei/cibook-python 本記事では、主にRではライブラリどーん!で済むけどPythonではそうはいかない部分の解説をします 書籍の紹介 https://www.amazon.co.jp/dp/B0834JN23Y 上記Amazonに目次が載っているのでそれを見るのが早い気がしますが。。 とても良い本です。正確な意思決定を行うためにどうやってバイアスを取り除くか?に焦点を当てて種々の因果推論の手法(傾向スコア/DiD/RDDなど)をRソースコードによる実装とともに紹介されています。 全体を通して、現実問題の効果検証に因果推論を活用するにはどうすればいいか?という観点で書かれており、非常に実用的だなーと
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く