くだすれPython(超初心者用) その12at TECH
くだすれPython(超初心者用) その12 - 暇つぶし2ch112:デフォルトの名無しさん
11/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を読もう)


次ページ
続きを表示
1を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch