如何将变量初始化为None/Undefined并与Python中的其他变量进行比较?

Joa*_*nge 5 python

基本上我有一些我不想预先初始化的变量:

originalTime = None
recentTime = None
postTime = None

def DoSomething ( ) :
    if originalTime == None or (postTime - recentTime).seconds > 5 :
        ...
Run Code Online (Sandbox Code Playgroud)

我在if上遇到编译错误:

UnboundLocalError: local variable 'originalTime' referenced before assignment
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,所有变量都有不同的关系,要么必须设置正确(时间,时间+ 5等),要么根本不设置,但我不想将它们设置为预先计算的值,只需将它们声明为None即更轻松.

有任何想法吗?

AFo*_*lia 15

我需要纠正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()
Run Code Online (Sandbox Code Playgroud)

应输出:

originalTime is None or evaluates to False
originalTime is None or evaluates to False
originalTime is not None and does not evaluate to False
Run Code Online (Sandbox Code Playgroud)

我再次警告说这是糟糕的设计.

  • 我看到讨论指出函数中全局的使用是一个糟糕的设计.但也许在正确的设计上展示一些示例代码?向我们展示你认为正确的做事方式.我认为我不是一个Python纯粹主义者,所以任何让我的代码以我想要的方式工作的东西,我都会使用它.直到我找到更好的东西当然. (2认同)

Sco*_*ood 6

你的代码应该有效,我猜它是在一个函数内部,但originalTime是在其他地方定义的.此外,它是一个好一点的说originalTime is None,如果这是你真正想要的,甚至更好,not originalTime.

  • 只是为了添加Scott的适当建议是None:请记住,"not originalTime"将匹配originalTime为0或""或False的情况,而originalTime为None将仅匹配originalTime实际为"None"的情况.许多开发人员使用此差异来描述尚未从执行上下文中没有值的那些变量中指定的变量.(即:def myfunc(somevar = None):如果somevar为None:somevar = 5#否则假设somevar = 0是故意的) (2认同)