Python:试图避免在time_passed函数中使用全局变量



我是python的新手,正在使用method time_passed()跟踪已经过去多的时间。

我希望不使用全局变量。有没有办法编写此方法,以便它不使用任何参数,并且不使用全局变量?

import time
start_time=time.time()    
def time_passed():
    return time.time() - start_time

处理此问题的pythonic方法是什么?

python中的静态变量等效类似于javaScript,在特定对象命名空间下分配变量在其分配的方法范围之外都可以持久。就像在JavaScript中一样,Python函数也是对象并且可以分配成员变量。

所以在此示例中,您可以写

import time
def timestamp():
    timestamp.start_time=time.time()
    return time.time() - timestamp.start_time

编辑:现在查看代码,您显然想初始化一次,并且此功能将重新启动start_time每个呼叫。我在python中不是那么经验,但这可能起作用

import time
def timestamp():
    if timestamp.start_time is None:
        timestamp.start_time=time.time()
    return time.time() - timestamp.start_time

您可以编写一个简单的类存储开始时间:

import time
class Timer:
    def __init__(self):
        self.start = time.time()
    def __call__(self):
        return time.time() - self.start

然后使用它:

time_passed = Timer()
print time_passed()

这样,您也可以轻松使用多个计时器。

应将生成器用于需要封装状态的函数。

import time

def time_passed_generator():
    start_time = time.time()
    while True:
        yield time.time() - start_time
time_passed = time_passed_generator()
#start
next(time_passed) # should be about 0.0
# ... later get the time passed
print(next(time_passed))

相关内容

  • 没有找到相关文章

最新更新