我是新來的蟒蛇,並試圖讀取bottle.py源代碼爲什麼一個方法可以引用一個未定義的變量?
在文檔中,我們必須
from bottle import route, run
使用奶瓶。
我嘗試閱讀源代碼,其中途徑是通過
# Shortcuts for common Bottle methods.
# They all refer to the current default application.
def make_default_app_wrapper(name):
''' Return a callable that relays calls to the current default app. '''
@functools.wraps(getattr(Bottle, name))
def wrapper(*a, **ka):
return getattr(app(), name)(*a, **ka)
return wrapper
route = make_default_app_wrapper('route')
在make_default_app_wrapper
符合2443只是一個函數defind,應用程序被稱爲,但應用程序是符合規定3325
app = default_app = AppStack()
所以當函數make_default_app_wrapper被調用時,應該沒有對象叫做app(我猜?),那麼返回的func如何知道應用程序指向什麼?我有什麼問題嗎?
所以關鍵是如果調用'make_default_app_wrapper'時定義'app'。如果定義了'app',那麼它就是一個閉包,如果沒有,'wrapper'每次調用時都會查找'app'。 – Coo 2013-05-12 10:17:22
好吧,不完全 - 即使'app'是在調用'make_default_app_wrapper'時定義的,每次都會查找'app'。 – unutbu 2013-05-12 11:21:15
呃?那麼如果我定義'app',並且想要調用它,而不管其他'app'是否定義在後面? – Coo 2013-05-12 11:33:08