2012-02-28 10 views
1

は、我々がグローバル配置する必要があります。このシナリオでは、この変数のみを読み込むにはグローバル変数を宣言する必要がありますか?

# global variable 
i_am_global = {} 

def get_global(): 
    global i_am_global # declare 1 
    if i_am_global is not None: 
     return i_am_global 
    global i_am_global # declare 2 
    i_am_global = do_something() 
    return i_am_global 
def main(): 
    get_global() 
if __name__ == "__main__": 
    main() 

を検討しますか? #宣言1または#宣言2で?なぜ?

これは、グローバルでメモリオーバーヘッドが発生すると聞いた(私はこの質問をしています)からです。

はあなたしか変数を読めば、あなたはglobalを使用する必要はありませんが、個人的に私はドキュメンタリー的な目的で行うあなた

+2

"* global原因メモリオーバーヘッド*" - 間違って聞いた。 Pythonの 'global'ステートメントはメモリオーバーヘッドを引き起こさない。 –

+0

両方の場所を試したとき、あなたは何を観察しましたか?あなたが 'global'ステートメントなしでそれを試したとき、あなたは何を観察しましたか? –

+0

#2では必要ですが、#1では必要ありません。この質問を見て:http://stackoverflow.com/questions/9366212/correct-use-of-global-variables-in-python-3 –

答えて

1

ありがとう私の理解を修正してください。私はまた、グローバルの命名規則を使用します。私はglobalキーワードにメモリオーバーヘッドがあるとは考えていませんが、テーマ内のグローバルは一般的に望ましくないと考えられています。

0

トップレベルの関数とクラスはすべてグローバル変数です。したがって、グローバルなオブジェクトを宣言することに問題はありません。

しかし、アンダースコアの前に付いていない変数は、そのモジュールとインポートする項目のパブリックインターフェイスとして機能することを理解する必要があります。

>>> from mutual_imports import global_object, changeGlobalObject 
>>> global_object 
2 
>>> changeGlobalObject() 
>>> global_object 
2 
>>> from mutual_imports import global_object 
>>> global_object 
'two' 

だから、あなたはそれを異なる時間をimpoprtingしている場合は異なる可能性が項目についてどう思いますか:

#module mutual_imports.py 
global_object = 2 

def changeGlobalObject(): 
    global global_object 
    global_object = "two" 

このモジュールを確認できます。このコードを考えてみましょう。

すべての変更可能なものは、オブジェクトを変更する方が簡単で分かりやすいため、一部のオブジェクトの変更可能な状態にすることは良いことです。