何かを書き留める何か

数学や読んだ本について書く何かです。最近は社会人として生き残りの術を学ぶ日々です。

『Effective Python 2nd ed.』項目3:bytesとstrの違いを知ろう

Unicodeだがunicodeはない

Effective Python 2nd ed.』の続き

effectivepython.com

実質的に初版のItem 3の続投であるが、初版はPython 2の文字列であるstrunicodePython 3のbytesstrの違いを含めて説明があったが、 2版ではPython 3向けの説明に特化して更新された。 単純にPython 2向けの説明を削ったのではなく、システムのエンコーディングに関する注意が追加されている。

自分の手元のPC(Windows 10)の環境でエンコーディングを調べてみた。

> python -c "import locale; print(locale.getpreferredencoding())"
cp932

日本語圏のWindows OSのPCなのでcp932であった。

localeのドキュメントを読んで、getdefaultlocale()も試してみた。

>>> import locale
>>> locale.getpreferredencoding()
'cp932'
>>> locale.getdefaultlocale()
('ja_JP', 'cp932')

業務でも、お客さんの環境はWindowsExcelCSVファイル開くというシチュエーションは(日本だと)頻出どころか必ず遭遇する問題である。 しかもcp932にあってShift_JISにはない文字を使われるなど日常茶飯事である。 必ずしもUTF-8エンコーディングではないという現実を受け入れつつ、『Effective Python 2nd ed.』に書かれているアドバイスを実行していこう。

『Effective Python 2nd ed.』項目2:PEP 8スタイルガイドに従おう

言語に依存しない原則

Effective Python 2nd ed.』の続き

effectivepython.com

これも初版からの続投であるが、コーディングスタイルを揃えるという話題はPythonに限らずどの言語でも重要なことである。 Pythonの場合、PEP 8という形で広く使われているコーディングスタイルがあるのでそれに従ったほうがいいよ、という話である。

最近使っているツールを振り返ってみる。 コードフォーマッターとしてBlackisort、 静的解析としてflake8mypy、 複雑度チェックにradonを採用している。 いずれも、「なるべく尊重しよう」ではなく、CIのステップの1つとして必ずチェックされるようにCIを設定している(使っているのはGitLab CI)。 そのため、機械的に判定できる部分で各々の好みが出ることはない。 ある程度の品質を保つことができている...と信じたいがこれらは最低限のものであり、 コードベースの品質を高めるには『Effective Python 2nd ed.』をさらに読み進めていくほかない。

『Effective Python 2nd ed.』項目1:使っているPythonのバージョンを知ろう。

3.8時代の『Effective Python

Effective Python』は2015年3月に発売された。

effectivepython.com

2015年頃は日本でもPythonが普及し始めた(ように見えた)が、 中級者以上向けのPython本としては『Expert Python Programming』(邦訳は『エキスパートPythonプログラミング』)しかなかった時代であった。 『Effective Python』はPython 3.4をベースに2.7向けの説明も含むものであった。 2019年の3.7が主流になった現在でも通用する内容であるが、古くなってしまった箇所もあった。

2019年11月に紙媒体の『Effective Python 2nd ed.』が発売されることが筆者のBrettさんによってアナウンスされた。

effectivepython.com

Python 3のみ対応で最新版である3.8もカバー、30個以上の新しい項目にアップデートと初版の1.5倍のボリュームになった。 11月まで楽しみに待っていよう...と思っていたが、O'Reilly MediaのSafari(現在はO'Reilly Learningという名前かも)から電子版が読めることが分かった(!)ので、少しずつ読み進めてみよう。 なお、初版と同様に翻訳が出るのか、という期待もあるがどのような計画が進められているのか私は知らない。

1章:Pythonic Thinking(Python流思考)

1章の前文は初版と同様で、「C++っぽいPython」や「JavaっぽいPython」ではない「Pythonらしい(Pythonic)Python」を書こうぜ、という内容である。

項目1:使っているPythonのバージョンを知ろう。

Python 3を使おう、というのは初版と同じであるが、初版時代はまだまだ2.7が現役であった。 過去の自分は以下のように感想を述べている。

Python プロフェッショナルプログラミング』もPython2.7だったし『Python言語によるプログラミング・イントロダクション』もPython2.7だしまだまだPython2.7は使われるのだろう。

『Effective Python』Item 1: 利用しているPythonのバージョンを知る - 何かを書き留める何か

xaro.hatenablog.jp

中々感慨深いものがある。

また、直近の業務経験を踏まえると、Dockerのコンテナ単位で環境を固めて運用することが多いので人によってPythonの環境が異なる、という事も少なくなったような気がする。 いい時代である。