0

スコープに問題があります。組み込み関数の結果に対して関数を動作させたいと思いますdir()。だから、簡単な例として、私はしたい

>>> print (dir())
>>>  .... bunch of stuff ...

しかし、このdir()の結果を操作する関数を定義したい。ただし、このように試してみると

>>> def print_dir(dummy_var=None):
        print dir()
>>> print_dir()
>>> ['dummy_var']

呼び出されたものの名前空間にアクセスできませprint_dirんが、これはスコープのことであり、理にかなっていますが、関数が呼び出される名前空間にアクセスする方法はありますか? または、dir() の結果を関数に渡す必要がありますか? お気に入り。

>>> act_on_namespace(dir())

念頭に置いている具体的な目標は次のようなものです。

def act_on_namespace()
    for k in dir():
        try:
            print(eval(k).__module__)
        except:
            pass
4

3 に答える 3

1

dirソートされた標準の python listを正確に返すため、必要に応じて操作できます。それを変数に格納するだけで、ボブはあなたのおじです。

于 2012-11-30T19:00:33.397 に答える
0

関心のある名前空間で dir を呼び出した結果を渡すだけではどうですか?

def act_on_namespace(dir_result)
    for k in dir_result:
        try:
            print(eval(k).__module__)
        except:
            pass

act_on_namespace(dir())
于 2012-11-30T19:17:30.557 に答える
0

いいえ、呼び出し元の名前空間をそのように操作する簡単な方法はありません。最も簡単な方法は、あなたがすでに提案したことを行うことです: call act_on_namespace(dir()). 本当に夢中になりたい場合はinspect、コール スタックを調べることができるモジュールを調べることができますが、何らかのデバッグ ツールを作成している場合を除き、これはおそらく良い考えではありません。

于 2012-11-30T19:17:40.740 に答える