一个奇怪的情况。 Python和Scope

时间:2013-03-18 22:39:03

标签: python constants scope

更具体地说,我将展示代码,然后解释正在发生的事情。

DATE = 'November'

def commander():
    pass

class Circle():
    pass

def log(orig_stdout, rep_log):
    pass

def debug(debugBool, info):
    pass

def main():
    Date = DATE

假设每个功能都填写完毕,那不是重要的部分。重要的是main()无法看到DATE,而我得到通常的"UnboundLocalError: local variable 'DATE' referenced before assignment"例外。

我认为常数具有全球范围?更奇怪的是它以前运作良好,但现在只是造成问题。如果你喜欢我可以告诉你剩下的代码,但它有点乱。

TL; DR:DATE的范围没有达到主要功能,为什么?

1 个答案:

答案 0 :(得分:3)

GOOD,只读取...因此它必须是GLOBALLY Scoped DATE

DATE = "November"
def main():
    xyz=DATE
    print "Date :",DATE
if __name__ == "__main__":
   main()

BAD(w / error),这是因为python认为你正在谈论的DATE是你稍后分配的DATE,这是一个影响GLOBAL的LOCAL变量。

DATE = "November"
def main():
    xyz=DATE
    print "Date :",DATE
    DATE = 123
if __name__ == "__main__":
   main()

GooD(再次)!!! ,现在python知道你在谈论GLOBAL变量DATE

DATE = "November"
def main():
    global DATE
    xyz=DATE
    print "Date :",DATE
    DATE = 123
if __name__ == "__main__":
   main()

至少这是我对Globals的理解。通常更好的做法是使用带有默认变量的参数

def main(my_date=DATE):
   #now there is no question and it will use global scope
   #the downside is it is set to the value of DATE at run start not at the time it goes to main