楽しみのために、関数クラスコンストラクターを使用して、つまり言語コンストラクトdefを使用せずに、型オブジェクトをインスタンス化してクラスを作成するのと同じように関数を作成できるかどうかを知りたいと思います。関数コンストラクターは、コードオブジェクトとグローバルの2つの引数を取ります。しかし、ソースを適切にコンパイルする方法がわかりません。
>>> def f():
... pass
>>> Function = type(f)
>>> Function
<class 'function'>
>>> code = compile("x + 10", "<string>", "exec")
>>> f = Function(code, globals())
>>> f()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <module>
NameError: name 'x' is not defined
>>> f(20)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: <module>() takes 0 positional arguments but 1 was given