- 112 名前:デフォルトの名無しさん mailto:sage [2011/12/07(水) 05:42:26.89 ]
- >>109
基本はネストさせないで書く(Zen of Python より ネストさせなくていいならしない方がいい) 内部的には、ローカル・グローバルになる等の違いはあるけど、 ネストさせるかどうかの判断基準にするようなことではない。 それよりも、「非公開関数はネストにする」といったルールを運用すると、 「関数 B は A と D からのみ呼び出す」といった場合に、困ることになります。 ## 内部関数が便利なのは、 * 引数があまりにも多くなる場合に、スコープ内の引数を省略できる。(クロージャ) * 関数に渡されたパラメータを元に、関数を動的に生成する場合等。(e.g. デコレータ定義) ## 欠点は、とりあえず思いつく限りでは・・・ * (慣れてない人にとって)コードが読みにくくなる事。デバッグが多少面倒になる。 * インデントが深くなる。 * 再利用しにくい。 * ドキュメント・ツールで自動で文書化出来ない。(※ デコレータ定義用途では、functools.wrapsを使えば可) * 関数の単体テストが出来ない。 > 状況: 関数Bと関数Cは、関数Aからしか呼び出されません。 こういった状況でネストする場合、大抵はクラスで置き換え可能なので、クラス A のメソッド _B, _C というようにする。 クラスにしない場合では、ネストさせずに 関数 A, _B, _C とします。( '_' プレフィクス付の命名で、内部関数と表明する。命名規則について >>2を読もう)
|

|