nikkie-ftnextの日記

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

イベントレポート | #技書博 10で小冊子『引数の型ヒントをlistにしてはいけません』を頒布しました

ありがとうございました!!

目次

『引数の型ヒントをlistにしてはいけません』って、何よ

告知ブログをどうぞ

以下のようにcollections.abc.Iterableを使う型ヒントの書き方を扱った小冊子です。

from collections.abc import Iterable


def plus_one(numbers: Iterable[int]) -> list[int]:
    return [n + 1 for n in numbers]

電子版頒布中です。

頒布の経緯

「なんで書いたのですか?」を何回も話したので、こちらにも。
購入者がアクセスできる最新版には追加済みです

元ネタとしては、公式ドキュメントに書いてあるんですよ!!
https://docs.python.org/ja/3/library/typing.html#typing.List

Note that to annotate arguments, it is preferred to use an abstract collection type such as Sequence or Iterable rather than to use list or typing.List.

意訳 関数の引数に型ヒントを書くときは、listtyping.Listを使うよりも、SequenceIterableのような抽象コレクション型を使うのが好ましいことに注意すること

ただ私がこれまでに出会ってきたコード(例:書籍にあるコード)は、引数の型ヒントがlistになりがちなんですよね。
ドキュメントのこの箇所を念頭に置いた上で、こだわりを持ってあえてlistを使っているならそれはそれでよいと思いますが、どうもドキュメントのこの箇所は読まれていないように思われます。
また、人は易きに流れがちなので、「Iterablelistでいいじゃん」となりがちなのかなと想像します

私はドキュメントに沿って好ましいPythonを書きたいというこだわりがあるので、投げ込んだ今回の小冊子1

引 数 の 型 ヒ ン ト を list に し て は い け ま せ ん

Python 3.9のリリース(2020年)を機に、私はこちらを知りました。
【オンライン】はんなりPython #34 python3.9を語る LT会 - connpass

https://docs.google.com/presentation/d/1KJlSSS-ZDByqqg_HO0_EFGbXCBqR8OMzzWwz8xvGQkU/edit#slide=id.gac59f1be36_0_288

頒布中に調べていたんですが、ベストプラクティスとしてドキュメント化されていました。
各種公式ドキュメントたちよ、もっと声高々に主張していこう!

(1) https://mypy.readthedocs.io/en/stable/cheat_sheet_py3.html#standard-duck-types

Use Iterable for generic iterables (anything usable in "for"),

(2) https://typing.readthedocs.io/en/latest/source/best_practices.html#arguments-and-return-types

  • arguments(引数)は抽象型
  • return values(返り値)は具体的な型

当日の様子

設営完了

広がるSNS上での反響、ありがとうございます!
一部抜粋

ふりかえりゾーン

  • この小冊子(新刊)、着手したのは5/8です。見本誌提出期限のその日に爆誕しました
    • PyCon US 2023諦めなどと同じコースに入っていたと思うのですが、今回は捻じ曲げたぞ!!!!
    • 諦めずに書き切れたのは、毎日1記事で小さい分量であろうとも記事を書く習慣の力かなあ
    • とはいえ私の課題は、長期を計画して遂行する必要があるタスクに対して、より短期的なときめきで動きまくってしまうのをどうするか
    • ありがとう、キンコーズさんのセルフコピー(小冊子だからなんとかなった)
  • 小冊子以外は落としました(運営の皆さま、大変ごめんなさい)
  • 当日の訴求がとても大事そう
    • Twitterやこのブログが届いていない層が来場していそうな感触
    • サークルアピール
      • ガイドブックに載せてもらえるので、来場した人が気づく可能性が上がる
      • ソロ出展なので、店番しながらガイドブック読みふけってました(活字中毒
    • 立ち読みコーナー
      • これは今回スルーしたのですが、私の過小評価だったと思います
      • 立ち読みコーナーは常時人がいた印象ですし、来場して立ち読みコーナーで認知するケースが結構あるんじゃないかと思われます
  • 立ち読みした方(買わなかった方も含む)とお話しできたのが、めっちゃよかった
    • フィードバックが大収穫!
      • ポスター発表に近かったってことかな
    • 型ヒントを書いたことがない方には、むしろ小冊子をオススメしませんでした(順を追うべきだと思うので)
    • 私のこだわりはIterableですが、それだと辞書を含むのがネックという議論ができたのがめちゃありがたい
      • 一人で考えていても出てこなかった見方に出会えた
      • Sequenceにする案も浮かぶが、Iteratorも受け取りたいよね。宿題)
  • お話ししたことでいただいた示唆
    • 「型ヒントとは何か」といった前提を盛り込んでから深い話という構成の可能性
      • なんのために型ヒントを書くか、も書けそう
    • 読みやすいコードはチームの文脈によって変わるんだろうな〜
      • 私はIterableにこだわりがあるけれど、チーム開発で常時採用できるわけではないということかな
      • それでも私は公式ドキュメントに沿ったPythonコードを世界に増やしたいんだ!

終わりに

技書博10、ありがとうございました!

プロジェクトの進行としては致命的でしたが、逆転頒布できて本当によかったです。
いただいたフィードバックを元に、今回の題材はブラッシュアップできそう! これがとても嬉しいです。

次回は半年くらい後の2025年1月。
マリネリアってISFの会場でもおなじみなんですよね。
逆転不要になるような自分にあったやり方を見つけて、また出展したいなあと思っています(もしかしてこのブログみたいに絶えず書く可能性!?)

P.S. 「こだわり」はこの記事の影響です

さすが、ばんくし王👏


  1. 私がやっていることは、劇場の至るところに「野球をしてはいけません」を貼る琴葉ちゃんっぽいなと思っています。つまり、nikkieは琴葉ちゃんなんだ!