2

重複の可能性:
Python での eval、exec、および compile の違いは何ですか?

私はそれを知っていた

  1. eval はfunction
  2. エグゼクティブはstatement

両方の簡単な使い方は次のとおりです。

eval('1+2')
exec 'print 1+2'

しかし、私が理解できない他の使用法があります。

  1. 変数を使用して関数名を格納し、この変数を使用して関数を呼び出します
    。例:

    def test():
        print 'hello world'
    func = 'test'
    func = eval(func)
    func() # this will call test()
    


    func = eval(func)
    返された後に (func) と入力します
    <type 'function'>
    のドキュメントを読みましたevalが、eval でこれができる理由がわかりません。

  2. 変数を使用してモジュール名を格納し、この変数を使用してモジュールをインポートします。
    例えば。

    m = 'sys'
    exec "import " + m
    

    これが理由ですか:
    import module_name表現ではなくステートメントですか?
    and:
    eval式を計算するためだけに
    exec、str でステートメントを実行しますか?

4

1 に答える 1

3

関数名の保存に関する質問の一部は、これが同等であるという事実によって説明できます。

def test():
    print 'hello world'
func = test
func() # this will call test()

eval()あなたの例での呼び出しは、次のような呼び出しと同じです。

y = eval('x + 1')

あなたの2番目の質問はこれと同じだと思います。答えが役立つかもしれません.

于 2013-01-22T10:23:02.940 に答える