関数ではないグローバル変数にアクセスするには?
現在、私はアクセスglobals()
してから、モジュールに存在することがわかっている関数の削除を手動でハードコーディングしています。
x, y, z = 1, 2, 3
def f(i, j):
return i+j
def g():
variables = globals()
del variables['g']
del variables['f']
これは自動的に行うことができますか?(関数であってはならないということを除いて、変数の型がわからないと仮定しますか?
globals()
をループしてループ内で削除しようとすると、かなり奇妙になります。
>>> import types
>>> x, y, z = 1,2,3
>>> def g():
... variables = globals()
... for k in variables:
... if isinstance(variables[k], types.FunctionType):
... del variables[k]
...
>>> g()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in g
RuntimeError: dictionary changed size during iteration
私は次のようなことをしなければなりません:
>>> def g():
... variables = globals()
... functions = []
... for k in variables:
... if isinstance(variables[k], types.FunctionType):
... functions.append(k)
... for f in functions:
... del variables[f]
...
>>> g()
関数ではないグローバル変数にアクセスする簡単な方法はありますか?
編集済み
>>> x, y, z = 1,2,3
>>> def f(i,j):
... return i+j
...
>>> globals()
{'f': <function f at 0x105f6df50>, '__builtins__': <module '__builtin__' (built-in)>, '__package__': None, 'x': 1, 'y': 2, '__name__': '__main__', 'z': 3, '__doc__': None}
>>> def g():
... print globals()
...
>>> g()
{'g': <function g at 0x105f72320>, 'f': <function f at 0x105f6df50>, '__builtins__': <module '__builtin__' (built-in)>, '__package__': None, 'x': 1, 'y': 2, '__name__': '__main__', 'z': 3, '__doc__': None}