Python 如何设置一个随着系统时间变化的动态变量?

想取当前时间,但取时间那一坨内容太长了,复制的到处都是,封装一个方法行是行,但感觉有点啰嗦 我是想能不能通过一个动态变量 a 来获取当前时间,能做到吗?直接赋值,取的就是变量生成那一瞬间的固定时间了,不是我想要的,我想要的是 print(a) 就能获取当前时间

>>> a =  time.strftime('%Y-%m-%d %H:%M:%S')
>>> a
'2018-04-26 14:16:17'
>>> a
'2018-04-26 14:16:17'
>>> a
'2018-04-26 14:16:17'
>>>

==================

>>> def a():
...     return time.strftime('%Y-%m-%d %H:%M:%S')
...
>>> a()
'2018-04-26 14:19:36'
>>> a()
'2018-04-26 14:19:39'
>>> a()
'2018-04-26 14:19:41'
>>>


Python 如何设置一个随着系统时间变化的动态变量?

10 回复

既然要 class 的 repr 为函数的结果,定义 metaclass 的 repr
python 3<br>class _a(type):<br>   def __repr__(self):<br>      return time.strftime('%Y-%m-%d %H:%M:%S')<br><br>class a(object, metaclass = _a):<br>   pass<br><br>print(a)<br>


在Python里,要搞一个随着系统时间动态变化的变量,最直接的办法就是用一个函数或者一个property装饰器,每次访问的时候都重新获取当前时间。

比如,你可以定义一个类,然后用@property装饰器来包装一个方法。这样,每次你访问这个属性的时候,它都会调用datetime.now()来获取最新的时间。

from datetime import datetime

class DynamicTime:
    @property
    def current_time(self):
        """每次访问都返回最新的系统时间"""
        return datetime.now()

# 使用示例
time_obj = DynamicTime()
print(time_obj.current_time)  # 输出类似:2023-10-27 10:30:15.123456
# 稍等一会儿再访问
print(time_obj.current_time)  # 输出一个更新的时间

如果你不想要类,只想搞个简单的变量,那可以写个函数:

from datetime import datetime

def get_current_time():
    return datetime.now()

# 每次调用函数获取最新时间
print(get_current_time())

关键点在于,不要把时间点存到一个静态变量里,而是要通过一个调用(函数或property)来实时获取。这样它才是真正“动态”的。

简单说,用property或者函数来包装对datetime.now()的调用。

python<br>class A(object):<br> <br> def a(self):<br> return time.strftime('%Y-%m-%d %H:%M:%S')<br>

print(A().a)

比直接定义方法还麻烦啊

你是嫌定义麻烦还是调用麻烦?定义麻烦的话:

a = lambda:time.strftime(’%Y-%m-%d %H:%M:%S’)

应该没有更简单的办法了。调用麻烦的话,就一楼。

你在提出这个需求的时候,有没有想过这种动态变量,假如有的话,底层要以什么原理来实现?
每隔一个毫秒,系统自动更新一次这个变量所在内存里的值吗?
还是平时不变,只在你取值的时候更新一下?
这后者不就是函数么,还是说你只是想要个省略括号的语法糖?

python<br>&gt;&gt;&gt; a = lambda :time.strftime('%Y-%m-%d %H:%M:%S')<br>&gt;&gt;&gt; a()<br>'2018-04-26 15:32:20'<br>&gt;&gt;&gt; a()<br>'2018-04-26 15:32:23'<br>&gt;&gt;&gt;<br>

创建动态变量

locals()[变量名] = 变量值

import time

now=type(‘now’, (), {‘repr’: lambda s: str(time.time())})()



使用:

In [105]: now
Out[105]: 1524728419.898981

In [106]: now
Out[106]: 1524728420.5150971

In [107]: now
Out[107]: 1524728421.219552

In [108]: now
Out[108]: 1524728425.09097

回到顶部