LoginSignup
9
1

More than 1 year has passed since last update.

PyCon JP 2022 day1 Pythonに上級テクニックは要らない(そして正しい付き合い方)

Posted at

現地参加したPyCon JP 2022のセッションのまとめ4本目です。

今回は、Day1の「Pythonに上級テクニックは要らない(そして正しい付き合い方)」です。

動画

スライド

スピーカー

  • 清原弘貴さん
    • 株式会社ゼンプロダクツ
      • 代表取締役

内容まとめ

  • テクニックを過剰に使いすぎず、可読性・メンテナンス性の高いPythonコードを書くには、というお話

テクニックとは

    • デコレータ
    • Context Manager
    • ジェネレーター
    • 型ヒント
    • など
  • これらは学ぶと使いたくなる、使っていくべきもの
  • しかし、過剰に手を染めすぎると可読性もメンテナンス性も下がる

理想としては

  • 要件に合わせた意図を、プログラムという形で読みやすく記述できればいい
  • テクニックは上手く隠蔽されているべきである

テクニックを使う場の見極め

手元のテクニック

  • 仕事で書く自分の範囲

チームのテクニック

  • 仕事のプロジェクトで書く中心部分

世界のテクニック

  • 広く使われる・根底になるライブラリーやフレームワーク

内包表記

  • 単純な場合は使おう
  • しかし、二重の内包表記は避けた方がいい。ループで良い。
    • 「内包表記の方が速い」が、その速度差を意識すべき場でないことがほとんど

外部や未来への影響

  • 重要なのは、外部との関わりである
  • 外部の関数やモジュールに影響がないなら好きにすればいい
  • テストの書きやすさやモデルの設計こそが重要
  • 最初は、プロジェクトやフレームワークの指示に従い学ぶ

なぜクラスにするのか?

  • 辞書やタプルで十分な場合もある
    • その方がテストしやすい
  • 「ユーザーという辞書」のような概念があったり、共通した形を期待する関数が多い場合はクラスにする

あんまり使ってほしくないもの

  • globallocal
    • モジュールのグローバルな状態に依存
  • subprocess
    • 外部環境への依存

基底クラス

  • 1回継承させる程度が良い
  • 例えば、BaseBackendFoobarBackendなど

「間を書き換えたい」は危険

  • 「長い処理のここだけ書き換えたいからクラスを継承させる」というのは危険
  • 重複したコードでも2つ程度なら良い
    • DRY(Don't Repeat Yourself)の原則からは外れるので、難しいラインではあるけど

継承やクラスの意図が重要

  • OK
    • ビジネス上の処理のフローが決定していて、それを基底クラスとして決めた
  • NG
    • 継承すれば書き換えられるから、基底クラスにしておいた

まとめ

  • テクニックは積極的に学ぶべきだが、要らないなら無理に使わなくても良い
  • しかし、使っていかないと学べないのも確か
  • 受け身に使える文法は多くて良いが、能動的に使うときは見極めよう
    • 練習で作って失敗しておこう
  • 実は「テクニック」よりも関数の設計やモジュールの分割などが重要
  • 学ぶには作って経験すること、テストを書くこと、他人のコードを読むことが大事

感想

  • 内包表記使うかループを使うかは、私も悩んだことがあります。
  • そして、他の言語でもこういうことあるなと思いました。
  • テストコードが書きにくいということは、設計や実装に改善点があると思うので、そういう時にしっかり考えたいですね。
9
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
1