19

Python 関数内でグローバル変数を設定するにはどうすればよいですか?

4

7 に答える 7

24

関数内で変数を使用するには、そのように関数内で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.
于 2013-05-31T20:15:07.270 に答える
2

グローバルは任意の関数からアクセスできますが、関数内で「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!
于 2013-05-31T20:36:23.787 に答える
2

次のコードを検討してください。

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

基本的に、すべての関数が同じ変数 (オブジェクト) にアクセスする必要がある場合は、グローバル変数を使用します。ただし、これが常に最善の方法とは限りません。

于 2013-05-31T20:20:24.167 に答える
1

global <variable name>関数内で使用することによる明示的な宣言が役立つはずです

于 2013-05-31T20:15:28.447 に答える
1

c以下の例では、他の関数の外で定義された変数があります。ではfoo、 a も宣言しc、インクリメントして出力します。inは関数のスコープ内でローカルであるfoo()ため、繰り返し呼び出すと同じ結果が何度も返されることがわかります。cfoo

ただし、ではbarキーワードglobalは の前に追加されcます。これで、変数はグローバル スコープで定義されたc任意の変数(つまり、関数の前に定義されたインスタンス) を参照します。繰り返し呼び出すと、ローカル スコープではなくグローバルが更新されます。cc = 1barc

>>> 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
于 2013-05-31T20:15:49.650 に答える
0

通常の変数は関数の内部でのみ使用でき、グローバル変数は関数の外部で呼び出すことができますが、必要がない場合は使用しないでください。エラーが発生する可能性があり、大きなプログラミング会社はこれを新人だと考えています。行う。

于 2016-06-23T10:42:16.227 に答える