nikkie-ftnextの日記

イベントレポートや読書メモを発信

イベントレポート | 『Python Distilled』試飲会、公式ドキュメントのどこに書いてあるでしょうクイズが大変面白かった! #bpstudy

はじめに

今できないことがあっても大丈夫✊ nikkieです😭

近況ですが、11/30からはミリシタのオレンジノキオク イベントでUR 葉月恋状態です🟧
そんな11/30に『Python Distilled』の試飲会に参加していました。

ちなみに11/30はGuidoさんmeetupに参加した後、会場からの帰り道がhayaoさんと同じでした(hayaoさんは登壇で移動、私はbpstudyに参加したくて直帰)

目次

BPStudy#195〜Python Distilled(蒸留されたPython)

今回のBPStudyでは、「Python Distilled」の訳者である鈴木 駿(すずき はやお)氏をお招きし、書籍の要点と活用方法について話を伺います。クイズもあるようです。楽しんでご参加ください。

このクイズがとても楽しかったです!

当日の様子はこちら

Python Distilled 試飲会

クイズはスライド15/60から始まります。
公式ドキュメントのどこにあるかは、発表資料(PDF)から飛べます。
GitHubからダウンロードしてお手元で確認するのがオススメです。

第1問「シングルトンはisで比較」はどこに書いてある?

スライド 16/60

答えは、PEP 8
https://peps.python.org/pep-0008/#programming-recommendations

Comparisons to singletons like None should always be done with is or is not, never the equality operators.

意訳 Noneのようなシングルトンの比較は、常にisまたはis notでなされるべきであり、同値性の演算子でなされるべきではない
(equality operatorsは==!=のことだと理解しています)1

PEP 8を参照する形で、言語リファレンスの6(式)にもあるとのこと。
https://docs.python.org/ja/3/reference/expressions.html#value-comparisons

None and NotImplemented are singletons. PEP 8 advises that comparisons for singletons should always be done with is or is not, never the equality operators.

PEP 8というのは思ってもみませんでした。
複数の文献で説かれていたので、これまでの私は公式ドキュメントを探す機会がなかったですね〜

第2問「関数の引数のデフォルト値はイミュータブルなオブジェクトを使う」はどこに書いてある?

スライド 18/60

答えは、プログラミングFAQ
なぜオブジェクト間でデフォルト値が共有されるのですか?2

関数の呼び出しによって、デフォルトの値に対する新しいオブジェクトが作られるのだと予想しがちです。実はそうなりません。デフォルト値は、関数が定義されたときに一度だけ生成されます。

Pythonチュートリアル 4.8.1にも!
https://docs.python.org/ja/3/tutorial/controlflow.html#default-argument-values

重要な警告: デフォルト値は 1 度だけしか評価されません。デフォルト値がリストや辞書のような変更可能なオブジェクトの時にはその影響がでます。

プログラミングFAQにはオススメも書いてあります3

代わりに、None をデフォルト値に使い、そのパラメタが None である時にだけ、関数の内部で新しいリスト/辞書/その他をつくるようにしてください。

私はこれを『Effective Python 第2版』で読んでいて、今回その根拠を知った形になります。

項目24 動的なデフォルト引数を指定するときにはNoneとdocstringを使う

第3問「with文の使い方」はどこに書いてある?

スライド 20/60

3箇所挙げられています。

(1) 言語リファレンス 複合文4の8.5
https://docs.python.org/ja/3/reference/compound_stmts.html#the-with-statement

一つの "要素" を持つ with 文の実行は以下のように進行します:

with文に関係する特殊メソッド(__enter____exit__の呼び出し)の説明もあり、情報豊富ですね。

(2) PEP 343

(3) チュートリアルでも「7.2. ファイルを読み書きする」で触れられているそうです。
https://docs.python.org/ja/3/tutorial/inputoutput.html#reading-and-writing-files

ファイルオブジェクトを扱うときに with キーワードを使うのは良い習慣です。

私は「導入された2.5のWhat's New in Pythonにも書いてあるんじゃないかな」と思いました。
https://docs.python.org/ja/3/whatsnew/2.5.html#pep-343-the-with-statement

'with' ステートメントは、以前なら後片付けが実行されるのを確実にするために try...finally ブロックを使ったであろうようなコードを、より単純明快にします。

第4問「__new__()__init__()の関係」はどこに書いてある?

スライド 22/60

言語リファレンスの「3.3.1. 基本的なカスタマイズ」!

__init__()

インスタンスが (__new__() によって) 生成された後、それが呼び出し元に返される前に呼び出されます。

__new__()__init__() は連携してオブジェクトを構成する (__new__() が作成し、 __init__() がそれをカスタマイズする)

いずれも https://docs.python.org/ja/3/reference/datamodel.html#object.__init__ より

第5問「from module import * はモジュールレベルで可能。クラスや関数定義ではできない」はどこに書いてある?

スライド 24/60

答えは、言語リファレンスの「7.11. import 文

インポートのワイルドカード形式 --- from module import * --- は、モジュールレベルでのみ許されます。クラスや関数定義でこの形式を使おうとすると、 SyntaxError が送出されます。

スライド(25/60)にもありますが、これを使うのは推奨されません🙅‍♂️
私がPyCon JP 2022でアスタリスクについて話したときのスライドでも述べています。

感想:『Python Distilled』読まなきゃ!

今年は上半期に『ロバストPython』があり、たびたび格闘しているのですが、Python Distilled』も読む必要性を感じました

公式ドキュメントは結構見ているかなと思っていたのですが、クイズに参加してどこに書いてあったっけ?と根拠が思い出せないことが多かったです。
『Effective Python』のような書籍が浮かぶこともあったのですが、Pythonの一次情報は公式ドキュメントだと思うので、脳内インデックスに伸びしろがあるな〜と思いました。

膨大な公式ドキュメント、これが『Python Distilled』の336ページに凝縮されているんですよ!!(スライド31/60)
クイズで公式ドキュメントにはまだまだ知らないことがあるというのを思い知り、それを1冊にぎゅぎゅっと詰め込んで学べる『Python Distilled』は、優先度上げて読まなきゃいけないなと思いました。
発表資料後半ではどこに何が書いてあるかが紹介されているので、どこから読もうか判断する助けになりそうです。

終わりに

BPStudy Python Distilled 試飲会のレポートでした。
公式ドキュメントのどこに書いてあるでしょうクイズ、面白かったです!
Python Distilled』読むぞ! いや、飲むぞ!
hayaoさん、運営の皆さま、参加者の皆さま、ありがとうございました。

今年はPython書籍 超充実✨の年ですな〜(干支は蛇ではないですが)

P.S. Python Distilled 書評探し

スライド 11/60で紹介されたものを探しました。

意訳 Python Distilled』を読まずにPythonコードを書くことは、誰であっても許されるべきではない

着実にPythonを自らの血肉にしていきたい人向けの本です。

すっごく気になるのがこちら👀

最初の方のファイルオープンのコーディングも、コンテキストマネージャを使い、セイウチ演算子も使ったサンプルがさっとでてきたりします。


  1. シングルトンパターンを使うことはほとんどないものの、シングルトンにはお世話になっているんですよね
  2. デフォルト値を持たせることで、その引数はオプションになります
  3. このオススメの先にはSentinel Valuesというトピックがありますね
  4. 複合文のリファレンスはPEGを読むのが楽しいです