Есть ли у гуру python возможность объяснить, почему этот код не работает:
def f(code_str):
exec(code_str)
code = """
g = 5
x = [g for i in range(5)]
"""
f(code)
Ошибка:
Traceback (most recent call last):
File "py_exec_test.py", line 9, in <module>
f(code)
File "py_exec_test.py", line 2, in f
exec(code_str)
File "<string>", line 3, in <module>
File "<string>", line 3, in <listcomp>
NameError: name 'g' is not defined
в то время как этот работает отлично:
code = """
g = 5
x = [g for i in range(5)]
"""
exec(code)
Я знаю, что это имеет какое-то отношение к locals и globals, как если бы я передавал функцию exec locals и globals из моей основной области, она отлично работает, но я не совсем понимаю, что происходит.
Может быть, это ошибка с Cython?
EDIT: пробовал это с помощью python 3.4.0 и python 3.4.3