0

具体的には、コードを示してから、何が起こっているのかを説明します。

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のスコープがメイン機能に到達しないのはなぜですか?

4

1 に答える 1

3

GOOD、読み取りのみ...したがって、グローバルスコープの日付である必要があります

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

悪い(エラーあり)、これは、Pythonがあなたが話している日付を後で割り当てる日付であると見なすために発生します。これはグローバル変数をシャドウするローカル変数です。

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

GooD(再び)!!! 、これでpythonは、グローバル変数DATEについて話していることを認識します。

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

少なくとも、それがグローバルの私の理解です。通常、デフォルトの変数で引数を使用することをお勧めします

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
于 2013-03-18T22:43:10.353 に答える