Python 関数内でグローバル変数を設定するにはどうすればよいですか?
7 に答える
関数内で変数を使用するには、そのように関数内でglobal
行う必要がありますglobal <varName>
。
testVar = 0
def testFunc():
global testVar
testVar += 1
print testVar
testFunc()
print testVar
出力を与える
>>>
0
1
global
割り当てを行う/変更する場合は、関数内で宣言するだけでよいことに注意してください。global
印刷やアクセスには必要ありません。
できるよ、
def testFunc2():
print testVar
最初の関数で行ったように宣言しなくてglobal
も、値は問題なく返されます。
list
例としてa を使用すると、list
宣言せずに a を割り当てることはできませんが、global
そのメソッドを呼び出してリストを変更することはできます。以下のように。
testVar = []
def testFunc1():
testVar = [2] # Will create a local testVar and assign it [2], but will not change the global variable.
def testFunc2():
global testVar
testVar = [2] # Will change the global variable.
def testFunc3():
testVar.append(2) # Will change the global variable.
グローバルは任意の関数からアクセスできますが、関数内で「global」キーワードを使用して明示的に宣言した場合にのみ変更できます。たとえば、カウンターを実装する関数を考えてみましょう。次のようなグローバル変数でそれを行うことができます。
count = 0
def funct():
global count
count += 1
return count
print funct() # prints 1
a = funct() # a = 2
print funct() # prints 3
print a # prints 2
print count # prints 3
さて、これで問題ありませんが、一般に、定数以外にグローバル変数を使用することはお勧めできません。クロージャーを使用して別の実装を行うこともできます。これにより、名前空間の汚染が回避され、よりクリーンになります。
def initCounter():
count = 0
def incrementCounter():
count += 1
return count
#notice how you're returning the function with no parentheses
#so you return a function instead of a value
return incrementCounter
myFunct = initCounter()
print myFunct() # prints 1
a = myFunct() # a = 2
print myFunct() # prints 3
print a # prints 2
print count # raises an error!
# So you can use count for something else if needed!
次のコードを検討してください。
a = 1
def f():
# uses global because it hasn't been rebound
print 'f: ',a
def g():
# variable is rebound so global a isn't touched
a = 2
print 'g: ',a
def h():
# specify that the a we want is the global variable
global a
a = 3
print 'h: ',a
print 'global: ',a
f()
print 'global: ',a
g()
print 'global: ',a
h()
print 'global: ',a
出力:
global: 1
f: 1
global: 1
g: 2
global: 1
h: 3
global: 3
基本的に、すべての関数が同じ変数 (オブジェクト) にアクセスする必要がある場合は、グローバル変数を使用します。ただし、これが常に最善の方法とは限りません。
global <variable name>
関数内で使用することによる明示的な宣言が役立つはずです
c
以下の例では、他の関数の外で定義された変数があります。ではfoo
、 a も宣言しc
、インクリメントして出力します。inは関数のスコープ内でローカルであるfoo()
ため、繰り返し呼び出すと同じ結果が何度も返されることがわかります。c
foo
ただし、ではbar
キーワードglobal
は の前に追加されc
ます。これで、変数はグローバル スコープで定義されたc
任意の変数(つまり、関数の前に定義されたインスタンス) を参照します。繰り返し呼び出すと、ローカル スコープではなくグローバルが更新されます。c
c = 1
bar
c
>>> c = 1
>>> def foo():
... c = 0
... c += 1
... print c
...
>>> def bar():
... global c
... c += 1
... print c
...
>>> foo()
1
>>> foo()
1
>>> foo()
1
>>> bar()
2
>>> bar()
3
通常の変数は関数の内部でのみ使用でき、グローバル変数は関数の外部で呼び出すことができますが、必要がない場合は使用しないでください。エラーが発生する可能性があり、大きなプログラミング会社はこれを新人だと考えています。行う。