12

extern int x;Cのように Python で外部変数を使用するにはどうすればよいですか?

例えば、

main1.py:

from myfunc import print_a 

a = 10 
print a    
print_a()

myfunc.py:

def print_a():
    global a   
    print a
4

3 に答える 3

11

モジュールで変数を再割り当てするだけです。

import myfunc
from myfunc import print_a 

a = 10 

print a

myfunc.a = a

print_a()

そうでなければ、それは不可能です。

importPythonは C とはまったく異なる方法でモジュールを扱うことを思い出してください。Python では、ファイルの「内容をその場所にコピー」するのではなく指定されたファイルのコードを実行moduleしてオブジェクトを作成します。

モジュールのグローバル変数はmoduleオブジェクト属性であり、これまでに示したように変更できます。組み込みを除いて、「グローバル変数」という概念はありません。


このグローバル変数をまったく変更する必要がないようにコードをリファクタリングして、を使用するコードをmyfunc.afrom からmain1に移動することをお勧めしますmyfunc。このようなグローバル変数が必要であるという事実は、コードに何か問題があり、それを修正する必要があるというコードの匂いです。


実際には、「グローバル スコープ」に影響を与える方法がありますが、あまりにもハックなので、言及したくありません。私を信じてください:あなたはそれを使いたくありません. このようなハッキングを使用したコードを誰かが見た場合、身体的な危険にさらされる可能性があります。

于 2013-08-03T15:56:18.860 に答える
3

C とは異なり、グローバル スコープで宣言された変数のスコープは、それらが作成されたモジュールに制限されているため、変数が存在するaモジュールで名前を修飾する必要があります。

このキーワードは、再割り当てによってグローバル変数を変更するglobalときに使用されます。グローバル変数を参照するだけの場合は必要ありません。

別のファイルの変数にアクセスしようとしている場合は、そのモジュールをインポートする必要があります。ファイルが構造化されているため、問題を解決するにはいくつかの方法があります。

オプション 1)myfunc.print_a関数内と内部のimport main1参照を移動しmyfuncて表示するa

main1.py

import myfunc

a = 10 

def main():
    print a    
    myfunc.print_a()

if __name__ == '__main__':
    main()

myfunc.py

import main1

def print_a():
    print main1.a

オプション 2)推奨変数を別のモジュールに移動し、両方を持ってmyfuncインポートmain1します。

vals.py

a = 20

main1.py

import vals
from myfunc import print_a

vals.a = 10 

print vals.a    
print_a()

myfunc.py

import vals

def print_a():
    print vals.a
于 2013-08-03T16:28:54.673 に答える