有没有办法在python中修改datetime对象?

时间:2015-02-07 14:42:01

标签: python datetime scope

在函数main中我有

def main():
    #...
    def button_callback(button,a, byMouse,label):
            #...
            date = date - oneday
            while(date.isoweekday()>5): date = date -oneday
            #...
    oneday = datetime.timedelta(1)
    date = datetime.date.today()

python抱怨:本地变量' date'在赋值之前引用,这是预期的。在main()的其他部分,我注意不要分配但是要修改,因此我有例如

def main():
    # other part of main()
    def clear_callback( button,byMouse,aaa):
        a_cats.clear()

    a_cats = set(["GT","GR"])

哪个python很高兴(如果我设置例如a_cats = a_cats.clear(),那就好了。)

有没有办法在不明确使用" ="的情况下修改日期时间对象,以便我可以避免使用全局变量?

2 个答案:

答案 0 :(得分:2)

如果您使用的是Python 3.x,则可以将变量声明为nonlocal

def main():
    def button_callback(button,a, byMouse,label):
        nonlocal date  # <--------------
        date = date - oneday
        ...

    oneday = datetime.timedelta(1)
    date = datetime.date.today()

答案 1 :(得分:0)

datetime对象是不可变的。更改date的唯一方法是将其绑定到新的datetime对象。

要分配给外部范围变量,您可以在Python 3 as @falsetru suggested中使用nonlocal,或者使用Python 2中的列表或自定义对象来模拟它:

def button_callback(self, *args):
    self.date -= DAY

请参阅What limitations have closures in Python compared to language X closures?