如果问题标题含糊不清,我很抱歉,我想不出更好的问题。
我在模块中有很多函数,我希望在本地调用时与从其他模块调用时表现不同。
这是一个玩具示例 moduleA.py
def func(arg1):
pass
do something
moduleB.py
import moduleA
func(arg1)
在moduleB中,func()
的调用需要
initSomething
func(arg1)
doSomethingElse
当从moduleA调用func()
时,我仍然需要原始行为。
虽然这个问题让我对使用装饰器感到尖叫,但我不确定是否会为func()
编写一个仅在从模块调用时才会触发的装饰器。
答案 0 :(得分:2)
听起来你想要给函数调用一个特定的上下文。这就是上下文管理器的用途。你可以这样做:
from contextlib import contextmanager
@contextmanager
def func_context():
# init_something
yield
# do_something_else
with func_context():
func(arg1)