2011-12-30 6 views
5

誰かがPythonのグローバルの使用とモジュール自体の参照について考えていたのだろうかと思っていました。過去に私は必要なときに、私が見つけた世界的に使用しながら、それがやや明確に第二の方法を行うには(そして最近、この構文を好む傾向があった):モジュールを指定するPythonのグローバル対の使用

import sys 
mod = sys.modules[__name__] 

counter = 0 

def incrementGlobal(): 
    global counter 
    counter += 1 

def incrementMod(): 
    mod.counter += 1 
明らか

それらの両方が正常に動作しますが、もし誰何か強い意見があります(より多くのpythonic、パフォーマンスなど)、私はそれらを聞くのが大好きです。

Btwモジュールが自然にすべてのメソッドや属性を単一のクラスにカプセル化し、参照incrementmodule.IncrementClass.counterというのではなく、incrementmodule.counterを使うことができます。

+2

どのように2番目の方が明確ですか? – delnan

+0

私はそれがはるかにはっきりしていないと思いますが、モジュールレベルの変数がローカル変数ではなく変更されていることがすぐにわかるので、変数がグローバル宣言内にあるかどうかを確認する必要はありません。 – gnr

+3

'global'と割り当てがそれほど遠い場合は、それよりも明瞭な問題がある;) – delnan

答えて

5

毎回globalとしてください。 globalキーワードは、モジュールレベルで何かを修正するための明らかで容易に認識できるパターンです。モジュールにsys.modulesからの参照を与えることは、不必要に回り込んで回っているように思え、それを見ている次のプログラマーを混乱させる可能性があります。

3
  • パフォーマンス:それは唯一の名前検索の代わりに、2を(だけ多くの何千ものタイトなループでは問題でしょう)必要とglobalスタイルを使用すると、ほんの少し速くなります。

  • スタイル:mod.xxxスタイルは、あなたが輸入していた別のモジュールからグローバルにアクセスする方法を反映:

`

import foo 
foo.eggs = 'scrambled' 

global方法がより一般的ですが、あなたのmod.xxxメソッドも理解しやすく、読みやすいです。

+2

downvoteはありませんが、 'global'を使うのは' mod.xxx'を使うよりはるかに一般的です。だから、私は 'global'を使うのが読みやすいと主張します。 – EOL

+0

@ EOL: 'global'が一般的な方法であり、より即座に認識可能であると同意しました。 –

関連する問題