【发布时间】:2012-08-18 23:44:30
【问题描述】:
我有这段代码:
#!/usr/bin/env python
def get_match():
cache=[]
def match(v):
if cache:
return cache
cache=[v]
return cache
return match
m = get_match()
m(1)
如果我运行它,它会说:
UnboundLocalError: local variable 'cache' referenced before assignment
但如果我这样做:
#!/usr/bin/env python
def get():
y = 1
def m(v):
return y + v
return m
a=get()
a(1)
它运行。
列表有什么东西吗?还是我的代码组织错了?
【问题讨论】:
-
您的第二个示例没有类似于
cache=[v]的行。这使得 Python 将变量视为局部变量,使函数内的早期引用非法。 -
你的条件不应该是
if v in cache:吗?否则,这是一个“缓存”,仅包含第一次调用的参数 -
我忍不住把你的代码和记忆联系起来,你打算这样做吗?在这种情况下,请查看stackoverflow.com/a/3377272/321973
标签: python closures scope python-2.x