Python:试图避免对时间传递函数使用全局变量

Python:试图避免对时间传递函数使用全局变量,python,python-2.7,time,global-variables,Python,Python 2.7,Time,Global Variables,我是Python新手,正在使用time_passed()方法跟踪经过的时间 我不希望使用全局变量。有没有一种方法可以编写这个方法,这样它就不会接受任何参数,也不会使用全局变量 import time start_time=time.time() def time_passed(): return time.time() - start_time Python的处理方法是什么?Python中的静态变量类似于Javascript,在Javascript中,在特定的对象名称空间下分

我是Python新手,正在使用time_passed()方法跟踪经过的时间

我不希望使用全局变量。有没有一种方法可以编写这个方法,这样它就不会接受任何参数,也不会使用全局变量

import time

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

Python的处理方法是什么?

Python中的静态变量类似于Javascript,在Javascript中,在特定的对象名称空间下分配一个变量会使它在分配给它的方法范围之外持久化。就像在Javascript中一样,Python函数是对象,可以分配成员变量

对于这个例子,你可以写

import time

def timestamp():
    timestamp.start_time=time.time()
    return time.time() - timestamp.start_time
编辑:现在看看代码,但是,你显然想初始化一次,这个函数将重新初始化每次调用的开始时间。我在Python方面不是很有经验,但这可能有用

import time

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

Python中的静态变量等价物类似于Javascript,在Javascript中,在特定对象名称空间下分配一个变量会使它在分配给它的方法范围之外持久化。就像在Javascript中一样,Python函数是对象,可以分配成员变量

对于这个例子,你可以写

import time

def timestamp():
    timestamp.start_time=time.time()
    return time.time() - timestamp.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

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

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

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

你说“时间戳”是什么意思?如果是实时戳,为什么需要“参考”/“开始”时间?说你确实需要,你将别无选择,而不是定义你的初始测量时间…这一点很好。这真的应该叫做时间流逝。我将更新问题以避免混淆。全局变量不是邪恶的。如果您确实希望避免在此处使用全局函数,那么可以使用封装state的生成器函数。您将如何封装state?这就是我希望做的。一个静态的、封闭的状态将是完美的。我试图避免使用全局变量,以免污染名称空间。你说“timestamp”是什么意思?如果是实时戳,为什么需要“参考”/“开始”时间?说你确实需要,你将别无选择,而不是定义你的初始测量时间…这一点很好。这真的应该叫做时间流逝。我将更新问题以避免混淆。全局变量不是邪恶的。如果您确实希望避免在此处使用全局函数,那么可以使用封装state的生成器函数。您将如何封装state?这就是我希望做的。一个静态的、封闭的状态将是完美的。我试图避免使用全局变量,以免污染namespace.Cool。我觉得有一个很好的方法可以做到这一点。:-)别担心,丹。我刚把开始时间改成了时间戳。开始时间。因此,它工作得很好。:-)唯一需要注意的是,函数需要在赋值之前定义。顺便说一句,当我在Python2.7上测试它时,None不起作用。使用hasttr是有效的。因此,在另一个用例中,我使用了:if not hasattr(时间戳,“start_time”):这样就可以了。:-)酷。我觉得有一个很好的方法可以做到这一点。:-)别担心,丹。我刚把开始时间改成了时间戳。开始时间。因此,它工作得很好。:-)唯一需要注意的是,函数需要在赋值之前定义。顺便说一句,当我在Python2.7上测试它时,None不起作用。使用hasttr是有效的。因此,在另一个用例中,我使用了:if not hasattr(时间戳,“start_time”):这样就可以了。:-)谢谢我会记住这一点。我认为这对于时间的流逝是不必要的,但对于其他一些情况,这将非常有效。:-)谢谢我会记住这一点。我认为这对于时间的流逝是不必要的,但对于其他一些情况,这将非常有效。:-)