はじめに
今できないことがあっても大丈夫✊ nikkieです😭
近況ですが、11/30からはミリシタのオレンジノキオク イベントでUR 葉月恋状態です🟧
そんな11/30に『Python Distilled』の試飲会に参加していました。
ちなみに11/30はGuidoさんmeetupに参加した後、会場からの帰り道がhayaoさんと同じでした(hayaoさんは登壇で移動、私はbpstudyに参加したくて直帰)
目次
- はじめに
- 目次
- BPStudy#195〜Python Distilled(蒸留されたPython)
- Python Distilled 試飲会
- 第1問「シングルトンはisで比較」はどこに書いてある?
- 第2問「関数の引数のデフォルト値はイミュータブルなオブジェクトを使う」はどこに書いてある?
- 第3問「with文の使い方」はどこに書いてある?
- 第4問「__new__()と__init__()の関係」はどこに書いてある?
- 第5問「from module import * はモジュールレベルで可能。クラスや関数定義ではできない」はどこに書いてある?
- 感想:『Python Distilled』読まなきゃ!
- 終わりに
- P.S. Python Distilled 書評探し
BPStudy#195〜Python Distilled(蒸留されたPython)
今回のBPStudyでは、「Python Distilled」の訳者である鈴木 駿(すずき はやお)氏をお招きし、書籍の要点と活用方法について話を伺います。クイズもあるようです。楽しんでご参加ください。
このクイズがとても楽しかったです!
当日の様子はこちら
Python Distilled 試飲会
昨日の #bpstudy のスライドはこちらです。そのうちSpeakerdeckにもアップロードします。 https://t.co/NgjmPOWVhN
— Hayao(-ε-δ) (@CardinalXaro) 2023年12月1日
クイズはスライド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
oris 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
andNotImplemented
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』読まなきゃ!
#bpstudy 『Python Distilled』積んどいてよかった。これは優先的に読まねば。
— nikkie / にっきー (@ftnext) 2023年11月30日
リファレンスに入り浸ってきたと自負してるけど、hayaoさんのスライドには私がリファレンスで拾えてないことがめちゃめちゃあった。知の高速道路がひかれてそう
今回の発表ならびに翻訳ありがとうございます!
今年は上半期に『ロバストPython』があり、たびたび格闘しているのですが、『Python Distilled』も読む必要性を感じました。
公式ドキュメントは結構見ているかなと思っていたのですが、クイズに参加してどこに書いてあったっけ?と根拠が思い出せないことが多かったです。
『Effective Python』のような書籍が浮かぶこともあったのですが、Pythonの一次情報は公式ドキュメントだと思うので、脳内インデックスに伸びしろがあるな〜と思いました。
膨大な公式ドキュメント、これが『Python Distilled』の336ページに凝縮されているんですよ!!(スライド31/60)
クイズで公式ドキュメントにはまだまだ知らないことがあるというのを思い知り、それを1冊にぎゅぎゅっと詰め込んで学べる『Python Distilled』は、優先度上げて読まなきゃいけないなと思いました。
発表資料後半ではどこに何が書いてあるかが紹介されているので、どこから読もうか判断する助けになりそうです。
終わりに
BPStudy Python Distilled 試飲会のレポートでした。
公式ドキュメントのどこに書いてあるでしょうクイズ、面白かったです!
『Python Distilled』読むぞ! いや、飲むぞ!
hayaoさん、運営の皆さま、参加者の皆さま、ありがとうございました。
今年はPython書籍 超充実✨の年ですな〜(干支は蛇ではないですが)
2023年は上期に『ロバストPython』に正論ガトリングを食らったと思っていたら、
— nikkie / にっきー (@ftnext) 2023年11月30日
下期に『Python Distilled』で言語のコアについてリファレンスで拾っているべき知識を見せつけられる。
今年はすごい年だ(武装チャンス) #bpstudy
P.S. Python Distilled 書評探し
スライド 11/60で紹介されたものを探しました。
I just finished @dabeaz 's "Python Distilled" book and I must say...
— Jean-Marc (@jeanmarcalkazzi) 2022年4月7日
No human should be allowed to write Python code before reading it. pic.twitter.com/juGMGpsMp6
意訳 『Python Distilled』を読まずにPythonコードを書くことは、誰であっても許されるべきではない
読書感想文書きました : Python Distillesは幅広い人にPythonの基礎を叩き込む本 | フューチャー技術ブログ https://t.co/n1WfEzRmeW
— 渋川よしき (@shibu_jp) 2023年11月16日
着実にPythonを自らの血肉にしていきたい人向けの本です。
すっごく気になるのがこちら👀
最初の方のファイルオープンのコーディングも、コンテキストマネージャを使い、セイウチ演算子も使ったサンプルがさっとでてきたりします。