あなたはあなたがコントロールすることができ、新たなデコレータとデコレータにパッチを適用できますと
import functools
def patch(parent, obj_name, switch_reg, switch_name):
def gen_switcher():
def wrapper(func):
ori_wrapped = ori_decorator(func)
@functools.wraps(func)
def _(*args, **kwargs):
if switch_reg.get(switch_name, False):
func_to_call = func
else:
func_to_call = ori_wrapped
print(func_to_call)
return func_to_call(*args, **kwargs)
return _
return wrapper
ori_decorator = getattr(parent, obj_name)
setattr(parent, obj_name, gen_switcher())
:
# have to patch the decorator before applying it
import numba
switchs = {}
patch(numba, 'jit', switchs, 'DISABLE_NUMBA_JIT')
@numba.jit
def f(a, b):
return a + b
f(1, 2)
の
利回り:と、その後
CPUDispatcher(<function f at 0x10a5f90d0>)
:
# this part could be rewrited as a context manager
switchs['DISABLE_NUMBA_JIT'] = True
f(1, 2)
GET:numbaについては
<function f at 0x10a5f90d0>
私が気づいていないのは、私はそれがうまくいくかどうか分かりません。自分で書く必要があると思います。例えば、 'f = numba 'を使ってモジュール内の上位レベルにその関数を公開することができます。jit(f) '形式を使用して、元のラップされていないバージョンを直接テストにインポートします。 – jonrsharpe