0

例えば、

から関数オブジェクトを作成したい。

mystr = \
"""
def foo(a=1): 
    print a
    pass
"""

ただし、compile(mystr) を使用すると、コード オブジェクトしか得られません。文字列がソースコードの一部であるように、モジュールレベルの関数オブジェクトが必要です。

これは達成できますか?

4

3 に答える 3

2

はい使用exec:

>>> mystr = \
"""
def foo(a=1): 
    print a
    pass
"""
>>> exec mystr
>>> foo
<function foo at 0x0274F0F0>
于 2013-04-26T10:04:19.180 に答える
0

ここでも使用できます。 、、 のcompileようなモードをサポートしています。execevalsingle

In [1]: mystr = \
"""
def foo(a=1): 
        print a
        pass
"""
   ...: 

In [2]: c=compile(mystr,"",'single')

In [3]: exec c

In [4]: foo
Out[4]: <function __main__.foo>

ヘルプcompile:

In [5]: compile?
Type:       builtin_function_or_method
String Form:<built-in function compile>
Namespace:  Python builtin
Docstring:
compile(source, filename, mode[, flags[, dont_inherit]]) -> code object

Compile the source string (a Python module, statement or expression)
into a code object that can be executed by the exec statement or eval().
The filename will be used for run-time error messages.
The mode must be 'exec' to compile a module, 'single' to compile a
single (interactive) statement, or 'eval' to compile an expression.
The flags argument, if present, controls which future statements influence
the compilation of the code.
The dont_inherit argument, if non-zero, stops the compilation inheriting
the effects of any future statements in effect in the code calling
compile; if absent or zero these statements do influence the compilation,
in addition to any features explicitly specified.
于 2013-04-26T10:08:59.297 に答える