delhi09の勉強日記

技術トピック専用のブログです。自分用のメモ書きの投稿が多いです。あくまで「勉強日記」なので記事の内容は鵜呑みにしないでください。

Python

PythonでEnumをstaticメソッド内でループする

やりたいことはタイトルの通り。以下の3つの書き方があった。 ②が一番スマートだが、Enumの仕様上こういう書き方もできるんだって知っておいて損はないと思った。※ この例では都道府県コードから都道府県を引くstaticメソッドを実装している。 書き方① Enum…

PythonでEnumを使うときの変数名の記法について

PythonでEnumを使うときの変数名の記法についてルールがあるのか気になったので調べてみた。 PEP8 PEP8には「Enumを書くときはxxxケースで書きなさい」ということは特に明記されていない。 ※ PEP8の方が、EnumがPythonに入った時期よりも、もちろん古いので…

Pythonでデシジョンテーブルを作成してみた

概要 ソフトウェアテストで使われるデシジョンテーブルという技法がある。gihyo.jp前からプログラムで作成できないのかな?と思っていたのだが、やってみたらPythonで意外と少ないコードで実現できた。以下で実際にデシジョンテーブルを作成しながら説明して…

PythonでHTTPステータスコードを表現するときにhttpモジュールに定義されている定数を使う

Pythonでは標準モジュールのhttpにステータスコードが定数で定義されていることを最近知った。 docs.python.org今までは知らなかったので、ステータスコードで判定する処理を書くときは if response.status_code == 200: print("OK") みたいにちょっとしたコ…

Pythonの例外の仕様についてちゃんと調べた

概要 今までPythonでコードを書くときに例外をなんとなく雰囲気で使っていたので、ちゃんと仕様を調べてみた。 検証したこと 1. Exceptionはコンストラクタ引数をargsフィールドに保持している 以下のようなコードを例にする。 def hoge(): raise Exception(…

requestsの公式ドキュメントは英語版を参照すること

Googleで「requests」を検索すると最初に以下の日本語版のドキュメントが出てくる。requests-docs-ja.readthedocs.io私はこれまで、ずっとこの日本語版を参照していたが、対象としているrequestのバージョンが1.0.4とかなり古いバージョンであることに最近気…

requestsが送出した例外からレスポンスボディを取得する

概要 requestsは以下のようにResponse.raise_for_status()というメソッドを使うとレスポンスのステータスコードが400系や500系だった場合に、例外を送出することができる。 bad_r = requests.get('http://httpbin.org/status/404') bad_r.raise_for_status()…

Pythonでテキストファイルの読み込み・書き込みを1行で行う(pathlibを使う方法)

以下のようにpathlibを使うと、Pythonでも1行でテキストファイルの読み込み・書き込みを行うことができることを知った。 読み込み from pathlib import Path text = Path("/path/to/fizz.txt").read_text(encoding="utf-8") 書き込み from pathlib import Pa…

Python Developers Surveyの2020年版が公開された

少し前に、Python界にはPython Developers Surveyという年1の調査があるということを書いたが、先日、2020年版が公開されたようである。www.jetbrains.com2019年と比べると、以下がパッと目を引いた。 Fast APIが前回は名前がなかったが、今回は12%シェアが…

isortのblack互換の設定にprofileオプションを使う

概要 Pythonプロジェクトのフォーマッターにisortとblackを使う場合、両者にはフォーマットルールが異なる部分があるので、isort側でblackと競合しないように設定する必要がある。これまでは、blackの公式ドキュメントに紹介されているisortの設定をコピーし…

JSとPythonでは空のlist(Array)の真偽値が異なる

まとめ JS: True Python: False 経緯 JSで以下のようなコードを書いたら、arrが空のArrayの場合でもif文の中に入ってこないことに気づいた。 # arrはArray if (!arr) { console.log("arr is empty."); } Pythonでは空のlistはFalseになるので、検証してみた…

Pythonのエコシステムの情勢が分かる調査(Python Developers Survey)

概要 『りあクト!』を読んでいたら、JSの世界には「The State of JavaScript」という、JavaScript周りの各種エコシステムの情勢を調査したものが存在することを知った。2019.stateofjs.comPythonの世界には同じような調査はないのかな?と思って調べてみた…

Pythonでファイル名にタイムスタンプをつける

以下、f-stringを使うと1行できれいに書ける。(Ver3.6以降) from datetime import datetime file_name = f"result.{datetime.now():%Y%m%d%H%M%S}.csv" print(file_name) ・実行結果 result.20200602183258.csv