【发布时间】:2021-01-13 01:19:13
【问题描述】:
为什么,在这段代码中,我不能从do_more() 内部访问db 或file?
def do_stuff(queue):
db = getDbConn()
while True:
file = queue.get() #DirEntry object
...
do_more(otherObject)
q.task_done()
我知道我可以将db 和file 作为参数传递给do_more(),但我觉得这些变量应该只在从其他函数调用的函数中可用。它从主要功能到第一级功能都以这种方式工作。我在这里错过了什么?
【问题讨论】:
-
简短回答:Python 与大多数现代编程语言一样,使用词法(又名静态)范围(外部范围锁定在定义函数的位置),而不是动态范围(外部范围取决于调用站点,每次更改时间)。您的代码工作的唯一方法是使用动态范围,这在 Python 中不是一个东西(不是没有重复中展示的疯狂黑客)。如果您希望
do_more能够访问do_stuff中的局部变量,则需要在do_stuff中定义它,以便其词法范围(在本例中为闭包范围)包含do_stuff的调用的运行时名称。
标签: python python-3.x inheritance