【发布时间】:2010-01-10 19:00:15
【问题描述】:
我想定义一个辅助函数,它能够在不显式传递的情况下从周围的上下文中修改模块级变量(具有已知名称),例如
# mod1.py
mod_var = 1
modify_var()
# mod_var modified
print mod_var
问题是 - 我无法通过mod1.mod_var 引用变量,因为我想跨多个模块使用辅助函数(辅助函数本身将在其他模块中定义);它应该从周围的调用上下文/范围中动态“选择” mod_var。
这可能吗?这个怎么获得?
我的用例是在 Django 中增强定义 URL -> 视图映射。这些定义分布在许多定义urlpatterns 模块级变量的子模块中。辅助函数应该从调用它的模块中选择这个变量并修改它。避免明确地将其作为参数传递会很好。
编辑: 如需其他解决方案 - 请查看 this 答案。
编辑2:
以下错误解决方案!(留作 cmets 参考)
最近我找到了另一种解决方案(我认为最不神奇的 ;))
modify_var() 函数可以这样实现:
def modify_var():
calling_module = __import__("__main__")
calling_module.mod_var = 42
不过,潜在的利润还是值得商榷的。
unittest 模块在其main 方法中使用了这种技术。
【问题讨论】: