我正在努力理解以下修饰的 python 函数中 request 和 request.db 的范围(此函数是 Pyramid “一个文件中的待办事项列表应用程序”教程的一部分):
@subscriber(NewRequest)
def new_request_subscriber(event):
request = event.request
settings = request.registry.settings
request.db = sqlite3.connect(settings['db'])
我认为函数中的赋值仅限于该函数的范围,除非声明为全局;所以根据我有缺陷的理解,当函数完成时, request 和 request.db 将超出范围。但在这种情况下,我显然错了,因为 request.db 随后在其他函数中被访问。有人可以解释一下魔术对象的 request 和 request.db 的起源和范围吗?