基本上我有一些我不想预先初始化的变量:
originalTime = None recentTime = None postTime = None def DoSomething ( ) : if originalTime == None or (postTime - recentTime).seconds > 5 : ...
我在if上遇到编译错误:
UnboundLocalError: local variable 'originalTime' referenced before assignment
正如您所看到的,所有变量都有不同的关系,要么必须设置正确(时间,时间+ 5等),要么根本不设置,但我不想将它们设置为预先计算的值,只需将它们声明为None即更轻松.
有任何想法吗?
我需要纠正Jarret Hardie,因为我没有足够的代表发表评论.
全球范围不是问题.Python将自动在封闭范围内查找变量名称.唯一的问题是您想要更改值.如果您只是重新定义变量,Python将创建一个新的局部变量,除非您使用global关键字.所以
originalTime = None def doSomething(): if originalTime: print "originalTime is not None and does not evaluate to False" else: print "originalTime is None or evaluates to False" def doSomethingElse(): originalTime = True def doSomethingCompletelyDifferent() global originalTime originalTime = True doSomething() doSomethingElse() doSomething() doSomethingCompletelyDifferent() doSomething()
应输出:
originalTime is None or evaluates to False originalTime is None or evaluates to False originalTime is not None and does not evaluate to False
我再次警告说这是糟糕的设计.
你的代码应该有效,我猜它是在一个函数内部,但originalTime是在其他地方定义的.此外,它是一个好一点的说originalTime is None
,如果这是你真正想要的,甚至更好,not originalTime
.