global var
変数を as として初期化することと を呼び出すことの違いは何ですかglobals().update(var)
。
ありがとう
あなたが言う時
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