我读过几乎所有关于这个主题的其他问题,但我的代码仍然不能正常工作。
我想我遗漏了python变量范围的一些东西。
这是我的代码:
PRICE_RANGES = {
64:(25, 0.35),
32:(13, 0.40),
16:(7, 0.45),
8:(4, 0.5)
}
def get_order_total(quantity):
global PRICE_RANGES
_total = 0
_i = PRICE_RANGES.iterkeys()
def recurse(_i):
try:
key = _i.next()
if quantity % key != quantity:
_total += PRICE_RANGES[key][0]
return recurse(_i)
except StopIteration:
return (key, quantity % key)
res = recurse(_i)
我得到了
"global name '_total' is not defined"
我知道问题出在_total
任务,但我不明白为什么。不应该recurse()
是否有权访问父函数的变量?
有人能向我解释一下关于python变量范围我缺少的是什么吗?
这是一个例子。
def outer():
a = 0
b = 1
def inner():
print a
print b
#b = 4
inner()
outer()
连同声明b = 4
注释掉,此代码输出0 1
就像你期望的那样。
但如果你不评论那行,在这行print b
,你会发现错误
UnboundLocalError: local variable 'b' referenced before assignment
似乎神秘的是b = 4
可能会让b
消失在它前面的线上。但是david引用的文本解释了为什么:在静态分析期间,解释器确定b被分配给inner
,因此它是inner
...。打印行尝试打印b
在它被分配之前。