nikkie-ftnextの日記

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

Python core

flake8(pycodestyle)には、二項演算子と改行について、排他的なルールがある(W503とW504)

はじめに 枕木の歌、いいよね... nikkieです。 flake8を触っていての気づきを書いていきます。 目次 はじめに 目次 相互に排他的な W503 と W504 2つある経緯は、PEP 8の変更 顕在化するのは、--ignoreオプションと使った時 終わりに P.S. Ruffでは? 相互に…

PythonでOptional型の型ヒントは Optional[X] と X | None 、どちらがいいのでしょう?

今の私の結論を言うと、好みです。 Union[X, None] という3択目もありますが、好みだと思います。 はじめに ミリシタの馬場このみさん1もよろしくね、nikkieです。 表題の件について、綴っていきます。 多少のただし書きを加えていますが、要は「好みです」…

懺悔:Pythonでクラスの継承を書くとき、super(self.__class__, self)は決してオススメしません(無限に再帰しちゃうよ)

はじめに オーイシおにーさん、ありがとうううううう!! vol.2おめでとおおおおおお!! nikkieです。 自作のSphinx拡張を例に、Pythonにおける継承について書いていきます。 やってはいけない事象の共有になります(俺みたいになるな!) 目次 はじめに 目…

pip installとpython -m pip install、pytestとpython -m pytestは何が違う? python -mとsys.pathの秘密

はじめに Act-4、最高だった... 余韻の真っ只中のnikkieです。 表題の件について、違いを知ったので記します。 鍵を握るのはsys.pathです 目次 はじめに 目次 pytestのドキュメントより sys.pathのドキュメント 結論:pytestとpython -m pytestはここが違う…

Pythonの内包表記のifの位置

こういう見方ができるな〜と気づいたのでしたためます。 目次 目次 Pythonの内包表記 チュートリアルより、リスト内包表記の例 用語集より 言語リファレンス 式より 内包表記のifの位置に注目する forより後のif forより前のif まとめ:Pythonの内包表記のif…

Pythonで例外を文字列中に出力するときは、str()ではなくてrepr()に渡すのがオススメです

目次 目次 百聞は一見に如かず(タイトル回収パート) 例外をstr()とrepr()に渡して返り値の文字列を比較しよう 違いが顕著な例:何も渡さずに例外を初期化する print()についてもreprを介しましょう tips:f-stringは!rでrepr 執筆の背景:str()で出力した…

Pythonのlen()関数はデザインパターンのAdapterパターン、なのでしょうか?(もやもやを自分の中で決着させるための記事)

はじめに PyCon JP 2017に素晴らしい発表があります。 プレゼンテーション:len()関数がオブジェクトの長さを手にいれる仕組み | PyCon JP 2017 in TOKYO #pyconjp 2017のスライド。タイトルに興味惹かれ、知的興奮のパレードでした。lenやboolはAdapterパタ…

Pythonの組み込み型にlenメソッドはなくて、長さを知るときにlen関数を使うのはなぜ? Guido氏の意向に迫る

Pythonは歴史が長いので、色々な方がその理由を解説されていますが、私も自分の言葉で説明したくなったので一本書きます。 その理由は、生みの親(かつての慈悲深き終身独裁者)Guido氏の意向です。 Guido氏の考えを覗きに行きましょう。 目次 目次 デザイン…

Pythonで例外を捕捉するときに、except:やexcept BaseException:と書いてはいけません。except Exception:またはもっと具体な例外クラスを指定しましょう

はじめに RAISE THE DREAM!!! nikkieです。 ミリアニ12話を思い出すだけで泣ける身体にされてしまった1のですが、今回は技術ネタ。 Pythonでraiseするものといったら、例外!2 Pythonの例外の扱い、具体的に言うとtry ... exceptのexcept節について取り上げ…

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

はじめに 今できないことがあっても大丈夫✊ nikkieです 近況ですが、11/30からはミリシタのオレンジノキオク イベントでUR 葉月恋状態です そんな11/30に『Python Distilled』の試飲会に参加していました。 ちなみに11/30はGuidoさんmeetupに参加した後、会…

温故知新!「ソート HOW TO」で知ったDecorate-Sort-Undecorate(key引数がある今、これを使う必要はないわ)

この記事はPython Advent Calendar 2023 12日目にしちゃいます!先行するんだ はじめに そーーーっ nikkieです1。 私はPython公式ドキュメントが大好きでしょっちゅう入り浸っています。 そんなドキュメントの中から、PythonのソートについてDecorate-Sort-U…

SQLでいう「ORDER BY columnA DESC, columnB ASC」のようなソートは、Pythonではどう書く? 安定性を利用した複数回ソート または keyに指定した関数で負の数値を含むタプルを返す

はじめに ミリアニ7話は水着回! nikkieです1。 表題の疑問について、GPTから始めていくつか文献に当たったのですが、「ソート HOW TO」というドキュメントがめちゃ簡潔に回答していて感動したので一本したためます。 目次 はじめに 目次 前提:key引数を使…

openai-pythonの実装を見てPEP 661を知り、sentinel valuesの多様な実装が結びつきました(クラス・Enum・ウォルラス)

はじめに 背伸びのVenus♪1 nikkieです。 ライブラリopenai-pythonの素振りに励むnikkie氏。 「利用者が〇〇と書くだけで、なんでこんなことができちゃうんだろう」と気になったところは、ソースコード(裏の仕組み)も手短に確認します。 そんな中で新たに知…

デスクリプタ素振りの記:ユーザが(object.__setattr__を持ち出しても)属性に代入できないMoneyクラス

はじめに デスクリプタ完全に理解した! nikkieです(※エンジニアの"完全に理解した"はすぐ分からなくなるやつです) 先日のみんなのPython勉強会#98のLTをきっかけに興味を持ったデスクリプタについて素振りしました。 ※触り始めで深い理解はこれからですし…

Pythonの関数で可変長引数(*args、**kwargs)の型ヒントはどう書く?

関数本体では可変長位置引数(args)はタプル、可変長キーワード引数(kwargs)は辞書として扱われます。 これらの型ヒントには タプルの要素 辞書の値 の型を書けばよいです はじめに 三重さん(のメガネ)はおうちに飾れる!1 nikkieです タイトルの件が気…

Pythonでtypeの返り値を型と比較する(例:valueがint型か知りたいときにtype(value) == intとする)のはいかんぜよ

はじめに ぶっぶーですわ!‍♂️1 nikkieです。 表題の件について見ていきましょう。 某書籍レビューでお見かけして、記憶に刻まれた思い出があります。 目次 はじめに 目次 動作環境 flake8 「ぶっぶーですわ!」 なぜダメか ー サブクラスを考慮しないから …

非同期ジェネレータ 素振りの記(OpenAIのAPIに並行処理でリクエストを送る処理を書き直す)

はじめに みんな、目黒シネマへ行くんだ。特別上映版『かがみの孤城』が観られるぞ! nikkieです。 ここ数日Pythonの非同期ジェネレータが頭に引っかかっています。 難しそうな概念ですが、「ついにその時が来たか」と腹を決めて素振りしました。 ※考え違い…

openai-pythonでAPIのレスポンスをresponse.choicesともresponse["choices"]とも書けるのはなぜ? OpenAIObjectは辞書を継承したクラスだったのです

はじめに 『かがみの孤城』円盤発売まであと6️⃣日、nikkieです。 openai-pythonライブラリに関する小ネタです。 目次 はじめに 目次 APIのレスポンスの扱い方 OpenAIObjectは辞書を継承している OpenAIObjectインスタンスで.を使えるのは__getattr__を実装し…

openai-pythonライブラリで得たChat Completionのレスポンス全体をprintすると日本語が読めない事象の原因と対策

はじめに 公式さんもアドカレ参戦♪ 『かがみの孤城』円盤発売まであと7️⃣日 nikkieです。 先日のFunction callingのエントリで積んだ宿題に取り組みました。 目次 はじめに 目次 Function callingのエントリの宿題 なぜコードポイントで表示される? 寄り道…

Pythonのcsvモジュールのドキュメントにあるopen(..., newline="")のススメ、やっと意味分かった...(改行文字を変換するか否かの指定)

はじめに 映画『聲の形』を久しぶりに観ました、nikkieです。 Pythonのcsvモジュールのドキュメントで、長いことよく分からなかったのですが、ようやく意味が取れた箇所があります。 その点について共有します。 目次 はじめに 目次 ずっと分からなかった、o…

Pythonでリソースファイルと一緒にパッケージをインストールする指定は3つある 〜うち、include_package_dataとpackage_dataについて〜

はじめに サァン!!! nikkieです。 Pythonのパッケージに.py以外のファイルを含める設定について先日アウトプットしました。 知ったことを自作パッケージに適用しようとしたところ、ほかの設定方法もあることが分かりました。 深まった理解を元にアウトプットし…

Pythonでリソースファイルと一緒にパッケージをインストールするための設定値(📣MANIFEST.inが必要です)

はじめに みんなの中に私はいない1 nikkieです。 Pythonのパッケージに.py以外のファイルを含めたいことってありますよね。 これに必要な設定についてのアウトプットです。 なお、.py以外のファイルを指して、タイトルで「リソースファイル」と書きました。 …

Pythonのジェネレータ関数の返り値の型ヒントを考える

はじめに ニュージェネレーションズ! nikkieです。 Python使いのみなさん、ジェネレータ使ってますか? 私は多用しています、もう手放せません! そんなジェネレータ(を返す関数)の型ヒントについてアウトプットします。 目次 はじめに 目次 ジェネレータ…

Pythonの型ヒントのうち、typing.TypeGuardの使い所を完全理解しました

はじめに ともりるありがとうーーーー!!!1 nikkieです。 『ロバストPython』でtyping.TypedDictを知り2、便利なことに気づき、書く型ヒントをちょっとずつ増やしています。 mypyを使った型チェックで少し理解が進んだ点があったのでアウトプットします。 …

Pythonの内包表記、ifを複数並べて書けた...だと...(初めて知って相当の衝撃)

あ...ありのままに今起こったことを話すぜ! ※今回は特別編です 目次 目次 そもそもことのはじまりは ifを複数使った内包表記、動くんです! 言語リファレンスの構文定義を確認 終わりに そもそもことのはじまりは 金曜日のミノ駆動本_読書会(7章 コレクシ…

Pythonのイテラブルとイテレータ 〜for文の秘密〜

はじめに 京都リサーチパークにて開催のYAPC::Kyotoでノベルティを受け取りし参加者の1人、nikkieです。 Pythonはクラスに特殊メソッド1を定義することで、インスタンスに特別な振る舞いをさせることができます。 今回は、インスタンスをfor文で使えるように…

PythonのUnionまわりの型ヒントの書き方を整理する(Python 3.9と3.10が|が使える境目です)

はじめに 京都リサーチパークにて開催のYAPC::Kyotoでノベルティを受け取りし参加者の1人、nikkieです。 Pythonの型ヒントは進化が早く、Python3系のマイナーバージョンアップで型ヒントの新たな書き方が導入されることが多いと感じます。 Python 3.9と3.10…

PythonのASTと戯れる第一歩:文字列リテラルを全部置き換えてみる

目次 目次 きっかけ 今回の参考文献 できたもの:コード中のすべての文字列を置き換え ドキュメントメモ parse / unparse dump NodeTransformer Constant きっかけ 昨日参加したYAPC::Kyoto 2023。 その中のASTのトークに触発されました いくつか例を見せて…

Python使いはpip freezeの出力を常にrequirements.txtというファイルに保存する? 文献を調べたところいくつか流派があるようです

はじめに 答えはYesですか? nikkieです。 ふときっかけがあり、Python使いは皆pip freeze > requirements.txtするのか文献調査しました。 わかったことを現在のバックアップとしてまとめます。 目次 はじめに 目次 きっかけ 念のためのおことわり 暫定的な…

Pythonのif文の書き方ってどう説明します? 言語リファレンスの具象構文の世界の紹介、そしてその先へのいざない

この記事は、Python Advent Calendar 2022 25日目の記事です。 Python Advent Calendar 2022は現在4つに冗長化しており、24日目は saosao885さんによる「DataFrame型?Datatable型と違うの?と指定範囲のデータ取得を練習します。」 u1and0さんによる「OSS開…