コードを評価または実行するために必要なすべてのシンボルの名前のリストを取得する必要があります。私はsymtable
モジュールを使用しようとしましたが、それは適切にラムダと内部関数(def
他のコードの中に)を処理しないようです。ラムダ式のグローバルシンボルを特定する
import symtable
symtable.symtable("x+y", '<string>', 'exec').get_symbols()
私はこれを取得:[<symbol 'y'>, <symbol 'x'>]
私は期待して正確に何であるこの考えてみましょう。
が、ときに私は、この書き込み:
symtable.symtable("z=lambda x: x+y; z(10)", '<string>', 'exec').get_symbols()
結果は次のとおりです。[<symbol 'z'>]
と私についてx
(気にしない、それはローカル変数である)もy
(グローバルであると、これはどのような私である何の情報を持っていませんが必要)。
しかし、これをexec("z=lambda x: x+y; z(10)")
と評価しようとすると、y
という値がありません。式/コードに評価/実行できるようにする必要があるすべてのシンボルの名前を識別できる方法はありますか?
にインポートされている名前を取った場合、実際に可能な改善があるああ、私はそれを得ます!私には恥ずかしい...私は 'z'の子供のシンボルテーブルを見ることができます!それはいつものように、私はSOに質問を掲示したばかりのちょうど1分を自分で発見します。 :) –
これを回答として投稿することを検討してください(理想的には簡単な例があります)。これは、今後も同じ質問をしている人にとっては役に立つかもしれません。 – BrenBarn