code: def compile_func(arg_names, statements, name='_the_func', debug=False):
      
      func_def = ast.FunctionDef(
          name=name,
          args=ast.arguments(
              args=[ast.arg(arg=n, annotation=None) for n in arg_names],
              kwonlyargs=[],
              kw_defaults=[],
              defaults=[ex_literal(None) for _ in arg_names],
          ),
          body=statements,
          decorator_list=[],
      )
  
      mod = ast.Module([func_def])
      ast.fix_missing_locations(mod)
  
      prog = compile(mod, '<generated>', 'exec')
  
      # Debug: show bytecode.
      if debug:
          dis.dis(prog)
          for const in prog.co_consts:
              if isinstance(const, types.CodeType):
                  dis.dis(const)
  
      the_locals = {}
      exec(prog, {}, the_locals)
      return the_locals[name]
docs: Compile a list of statements as the body of a function and return
      the resulting Python function. If `debug`, then print out the
      bytecode of the compiled function.