[解決済み] 関数の戻り値の型と引数の型を知るには?
質問
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
. これを使用して、メソッドがどのように使用されることが期待されるかを文書化し、同時に素晴らしいユニットテストカバレッジを得ることができます!
関連
-
[解決済み] 関数デコレータを作成し、それらを連鎖させるには?
-
[解決済み] 最小限の驚き」と「変更可能なデフォルトの引数
-
[解決済み] 割り当て後にリストが予期せず変更されました。その理由と防止策を教えてください。
-
[解決済み] モジュールの関数名(文字列)を使って、モジュールの関数を呼び出す。
-
[解決済み] Pythonでオブジェクトが属性を持つかどうかを知る方法
-
[解決済み] 億の相対的輸入
-
[解決済み] タイプヒントを使用して複数の戻り値の型を指定する方法
-
[解決済み】type()とisinstance()の違いは何ですか?)
-
[解決済み] Pythonでコード行間にかかる時間を測定するには?
-
[解決済み] Django filter queryset __in for *every* item in list
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] PythonでのAWS Lambdaのインポートモジュールエラー
-
[解決済み] SQLAlchemy: セッションの作成と再利用
-
[解決済み] PythonでファイルのMD5チェックサムを計算するには?重複
-
[解決済み] pandasのタイムゾーンに対応したDateTimeIndexを、特定のタイムゾーンに対応したナイーブなタイムスタンプに変換する。
-
[解決済み] Ctrl-CでPythonスクリプトを終了できない
-
[解決済み] CSVデータを処理する際、1行目のデータを無視する方法を教えてください。
-
[解決済み] Flaskで非同期タスクを作る
-
[解決済み] Pythonの文字列の前にあるbという接頭辞は何を意味するのですか?
-
[解決済み] Pythonでランダムなファイル名を生成する最良の方法
-
[解決済み] Django filter queryset __in for *every* item in list