Por que o exec () do Python 3 falha ao especificar locais?

O seguinte é executado sem erro no Python 3:

code = """
import math

def func(x):
    return math.sin(x)

func(10)
"""
_globals = {}
exec(code, _globals)

Mas se eu tentar capturar o dict da variável local também, ele falhará com umNameError:

>>> _globals, _locals = {}, {}
>>> exec(code, _globals, _locals)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-9-aeda81bf0af1> in <module>()
----> 1 exec(code, {}, {})

<string> in <module>()

<string> in func(x)

NameError: name 'math' is not defined

Por que isso está acontecendo e como posso executar esse código enquanto captura variáveis globais e locais?

questionAnswers(1)

yourAnswerToTheQuestion