使用 time.time() 更新 Python 全局时间变量不起作用

Posted

技术标签:

【中文标题】使用 time.time() 更新 Python 全局时间变量不起作用【英文标题】:Update Python global time variable using time.time() doesn't work 【发布时间】:2015-08-12 22:55:57 【问题描述】:

由 time.time() 创建的变量不应该是不可变的,对吧?因此,我应该能够将其更改为其他内容。我在执行此操作时遇到了问题,而且 .sleep() 方法似乎没有帮助。

我将变量 e 设置为当前时间。我打印 e。然后我使用函数更新变量 e。然后我打印 e。两个打印的值应该不同,但它们不是。如何正确更新“全局”变量 e?

import time

e = time.time()
print ('e is %f') %e

time.sleep(1.12)
def uu(x):
    #time.sleep(2)
    x = time.time()

uu(e)
print ('%f') %e

无论我什么时候放延时,e的两个打印结果都是一模一样的。但是,我将 e 传递给函数,并且 e 不是不可变的,但它不会随着新的赋值语句而改变(即使在调用函数之前 [外部或内部] 存在时间延迟)。

我期待这样的输出

e is 1432940101.000643
1432940102.120643

第一个值与第二个值相差任意数量。

【问题讨论】:

e 是一个名字。它指的是time.time() 函数返回的float 对象。即使浮点数在 Python 中不是不可变的,您的代码也不会更改 e。查看图片Python has "names" 并查看Facts and Myths about Python names and values。如果您阅读俄语,请参阅this answer。如果不清楚,请更新您的问题。 相关:In Python, why can a function modify some arguments as perceived by the caller, but not others? @JFSebastian :从您的评论(在查看链接之前)看来,您是在说“uu(e)”在浮点数上调用该函数,而不是在浮点数上调用该函数,因此这不起作用。 【参考方案1】:

这是一个范围/命名空间问题。 e 被全局声明。即使我将e 传递 到函数uu 中,这也不会改变e 的全局定义值。

但是,如果我要在 uu 中放置一个 print 语句,那么带有该函数范围的 e 将具有不同的值。

【讨论】:

以上是关于使用 time.time() 更新 Python 全局时间变量不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Python time模块

Python time time()方法

Python time time()方法

python学习笔记-time库的使用

Python_time模块使用

Python time time()方法