15

global var変数を as として初期化することと を呼び出すことの違いは何ですかglobals().update(var)

ありがとう

4

1 に答える 1

28

あなたが言う時

global var

var がグローバル コンテキストで定義されたものと同じ var であることを Python に伝えています。次のように使用します。

var=0
def f():
    global var
    var=1
f()
print(var)
# 1  <---- the var outside the "def f" block is affected by calling f()

global ステートメントがないと、「def f」ブロック内の var はローカル変数になり、その値を設定しても「def f」ブロック外の var には影響しません。

var=0
def f():
    var=1
f()
print(var)
# 0  <---- the var outside the "def f" block is unaffected

globals.update(var) と言うとき、実際には globals().update(var) を意味していると思います。バラバラにしましょう。

globals() は dict オブジェクトを返します。dict のキーはオブジェクトの名前であり、dict の値は関連するオブジェクトの値です。

すべての辞書には「更新」と呼ばれるメソッドがあります。したがって、globals().update() はこのメソッドの呼び出しです。update メソッドは少なくとも 1 つの引数を想定しており、その引数は dict であることが想定されています。パイソンに言えば

globals().update(var)

次に、var は dict である方がよいため、Python に globals() dict を var dict の内容で更新するように指示しています。

例えば:

#!/usr/bin/env python

# Here is the original globals() dict
print(globals())
# {'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__file__': '/home/unutbu/pybin/test.py', '__doc__': None}

var={'x':'Howdy'}
globals().update(var)

# Now the globals() dict contains both var and 'x'
print(globals())
# {'var': {'x': 'Howdy'}, 'x': 'Howdy', '__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__file__': '/home/unutbu/pybin/test.py', '__doc__': None}

# Lo and behold, you've defined x without saying x='Howdy' !
print(x)
Howdy
于 2009-10-19T17:29:41.577 に答える