1. ホーム
  2. python

[解決済み] 関数の戻り値の型と引数の型を知るには?

2022-07-31 08:50:07

質問

Pythonのダックタイピングの概念は知っているのですが、関数の引数の型や関数の戻り値の型に悩まされることがあります。

さて、もし私自身が関数を書いたのであれば、私は型を知っています。しかし、誰かが私の関数を使用し、呼び出したい場合、彼/彼女はどのように型を知ることを期待されているのでしょうか? 私は通常、関数のdocstringに型情報を記述します(例. "...the id argument should be an integer..." そして "... the function will return a (string, [integer]) tuple." )

しかし、docstringの情報を調べる(そしてコーダーとしてそこに入れる)ことが、本当に本来の姿なのでしょうか?

編集してください。 回答者の大半は、「はい、ドキュメント!」という方向に向かっているようですが、私はこれが「複雑な」タイプにとって必ずしも容易ではないと感じています。

例:どのように を簡潔に説明する方法。 をdocstringで記述するにはどうしたらよいでしょうか?

docstringのPEPドキュメントには、それに関するガイドラインはありません。

その場合はクラスを使うべきだという反論があると思いますが、pythonはリストやタプルを使ってこれらのものを渡すことができるので、私は非常に柔軟だと思います、つまり を使わずに クラスなしで。

どのように解決するのですか?

これは動的言語がどのように機能するかということです。特にドキュメントが貧弱な場合、必ずしも良いことばかりではありません。時には、ソースを読むことに戻らなければならないこともあります。

ここでは、ダックタイピングの問題を回避するための戦略をいくつか紹介します。

  • 問題領域のための言語を作成する
  • これにより、適切な名前を付けることができます。
  • ドメイン言語の概念を表現するために型を使用します
  • ドメイン言語の語彙を使用して関数パラメータに名前を付ける

また、最も重要なポイントの1つです。

  • データはできるだけローカルに置いておく

渡されるのは、明確に定義され、文書化されたいくつかの型だけであるべきです。それ以外のものは、コードを見れば一目瞭然であるべきです。コードの周辺を見てもわからないような、奇妙なパラメータ型が遠くからやってくるようなことがあってはいけません...。

関連することとして、(docstringにも関連しますが)pythonのテクニックとして doctests . これを使用して、メソッドがどのように使用されることが期待されるかを文書化し、同時に素晴らしいユニットテストカバレッジを得ることができます!