2

関数ではないグローバル変数にアクセスするには?

現在、私はアクセス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}
4

0 に答える 0