Search code examples
python

How to initialize variables to None/Undefined and compare to other variables in Python?


Basically I have some variables that I don't want to preinitialize:

originalTime = None
recentTime = None
postTime = None

def DoSomething ( ) :
    if originalTime == None or (postTime - recentTime).seconds > 5 :
        ...

I get compile error on the if:

UnboundLocalError: local variable 'originalTime' referenced before assignment

As you can see, all the variables have different relationship that either has to be set right (time, time + 5, etc) or None at all, but I don't wanna set them to precalculated values when just declaring them to None is easier.

Any ideas?


Solution

  • I need to correct Jarret Hardie, and since I don't have enough rep to comment.

    The global scope is not an issue. Python will automatically look up variable names in enclosing scopes. The only issue is when you want to change the value. If you simply redefine the variable, Python will create a new local variable, unless you use the global keyword. So

    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()
    

    Should output:

    originalTime is None or evaluates to False
    originalTime is None or evaluates to False
    originalTime is not None and does not evaluate to False
    

    I second his warning that this is bad design.