我对python还不熟悉,而且正在努力阅读瓶子.py源代码
在文件中,我们必须
from bottle import route, run
使用瓶子。你知道吗
我试图阅读源代码,其中route只是第2443行中由
# 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\u default\u app\u包装器中,调用app,但app在第3325行中定义
app = default_app = AppStack()
所以当调用make\u default\u app\u wrapper函数时,应该没有名为app的对象(我猜是吧?),那么返回的func如何知道应用程序指向什么呢?我做错什么了吗?你知道吗
当
make_default_app_wrapper
被调用时,它定义了wrapper
,但是wrapper
本身没有被调用。只有在调用wrapper
(或route
)时,才需要定义app
。你知道吗当
wrapper
是定义的时,Python解析该行并确定裸名称
app
不是局部变量,因为它从不在赋值的左侧或列为参数。这只会影响app
的查找方式(当调用wrapper
时),此时不会尝试查找app
的值。你知道吗当
wrapper
被调用时,Python执行语句Python在全局名称空间中查找
app
的值。请注意,app
的值甚至可以从一个调用wrapper
更改为下一个调用。Python不会知道的。app
的值不是硬编码的。每次调用wrapper
时都会查找它。你知道吗相关问题 更多 >
编程相关推荐