首页 > 解决方案 > 如何创建一个不断更新的全局变量?

问题描述

我目前的项目是用 Python 制作时钟。使用 datetime 模块,我可以获得我需要的信息。但是,我希望能够格式化时间的打印方式。我的计划是首先将 datetime 模块的输出分成单独的部分,就像这样。

import datetime

time = datetime.datetime.now()
time.day()

使用这种方法,我可以选择我想要的时间段,并以任何顺序安排它们。然而,我发现的问题是,因为time的输出是创建变量的时间,所以我需要一种方法来不断刷新time它或它的特定部分,例如time.day()并且仍然能够访问它。我的下一个尝试是使用线程在后台运行刷新。

import threading
import datetime
import time

def clock():
    while True:
        return datetime.datetime.now()
        time.sleep(.1)

time = threading.Thread(target = clock())
time.start()

然而,这里出现的问题是我无法访问time包含的不同位。显然,time.day()不会在这里工作,也不会clock.day(),因为他们都没有那个选项。

TL;DR 我需要一种方法来创建一个不断更新的变量,这样我就可以使用和安排不同的位,time = datetime.datetime.now()同时保持它是最新的。

子问题 variable = threading.Thread(target=[obj]) 是否[obj] 必须是一个函数,或者是否有某种方法可以使代码循环在线程中运行而不将其作为函数运行,因此在线程中运行的变量是全局的?

标签: python

解决方案


好的,事实证明我看错了。我不需要不断更新的变量。我只需要它在调用时更新。这很简单,真的。看看下面的代码!

import datetime

def second():
    sec = datetime.datetime.now()
    return sec.second

Updoot 这是完成的程序!

import os
import datetime
import time

def second():
    sec = datetime.datetime.now()
    return str(sec.second)

def minute():
  min = datetime.datetime.now()
  return str(min.minute)

def hour():
  hr = datetime.datetime.now()
  return str(hr.hour)

def day():
  dy = datetime.datetime.now()
  return str(dy.day)

def month():
  mn = datetime.datetime.now()
  return str(mn.month)

def year():
  yr = datetime.datetime.now()
  return str(yr.year)

while True:
  print(hour()+":"+minute()+":"+second()+"\n"+month()+"-"+day()+"-"+year())
  time.sleep(.1)
  os.system('cls')

推荐阅读