0

程序第一次打印 Expired。我希望代码在打印过期之前至少打印 4 次“未过期”。有人可以解释原因并帮助我更正代码。谢谢

import time
TIMEOUT =  5

class Timer ():
    def __init__(self):
        self.timeout = time.time()+TIMEOUT
    def isExpired ():
        return time.time() > self.timeout

timing = Timer()

def main():
    while 1:
        if timing.isExpired:
            print "Expired"
            return
        else:
            print "Not expired"
            print "sleeping for 1 second"
            time.sleep(1)

if __name__== "__main__":
    main()
4

2 回答 2

3

你有几个问题:

  1. 你没有给你的isExpired方法一个自我论证。将其定义为def isExpired(self):

  2. 您正在每次循环迭代中创建一个新的 Timer 实例。将timing = Timer()while 循环移到外部。

  3. timing.isExpired是对方法对象自身的引用(在布尔上下文中始终为真)。你需要做timing.isExpired()才能真正调用它。

这些都是与Timer. 阅读Python 教程以了解如何使用类等。

于 2012-07-22T21:34:31.807 回答
1

您每次都在创建一个Timer实例。将其从循环中移开,否则您的 while 循环将永远不会终止。此外,您需要调用timing.isExpired,因为它是一种方法。所以你的代码应该是:

import time
TIMEOUT = 60 * 5

class Timer ():
    def __init__(self):
        self.timeout = time.time()+TIMEOUT
    def isExpired (self):
        return time.time() > self.timeout


def main():
    timing = Timer()
    while 1:
        if timing.isExpired():
            print "Expired"
            return
        else:
            print "Not expired"
            print "sleeping for 1 second"
            time.sleep(1)
于 2012-07-22T21:35:13.743 回答