python-3.x 一个函数用于改变另一个函数中的变量

kpbwa7wx  于 2023-02-26  发布在  Python
关注(0)|答案(1)|浏览(151)

我正在自学python,所以我做了一个项目,几个小项目一起工作,其中之一是一个日期跟踪器。Date函数工作正常。但是,当我尝试调用new day函数将日期增加1并根据需要更改月份和年份时,我得到了一个错误:

"AttributeError: 'function' object has no attribute 'day'".

我知道在一个函数里面有一个独立的局部变量而不是全局变量,而且你不应该让全局变量不断地改变,所以我试着让一个函数调用并使用另一个函数的变量,我计划把它做成一个按钮,可以改变1或7的日期,我只是无法想象如何让这个功能工作。任何方向或帮助让这个工作将不胜感激

# making a basic calendar
#list of months and their days
month_day = [[1,'January',31],[2,'February',28],
[3,'March',31],[4,'April',30],
[5,'May',31],[6,'June',30],
[7,'July',31],[8,'August',31],
[9,'September',30],[10,'October',31],
[11,'November',30],[12,'December',31]]
#checksum for new year
def isleapyear(year):
    if year%4 == 0:
        if year%100 == 0:
            if year%400 == 0:
                month_day[1][2] = 29
            else:
                month_day[1][2] = 28
        else :
            month_day[1][2] = 29
    else:
        month_day[1][2] = 28
#editable date (supposed to be
def Date():
    year = 1
    day = 31
    month = 1
    isleapyear(year)
    date = [day, month_day[month-1][1], year]
    return date
#function to increase day counter by 1
def new_day():
    #checksum for month or year rollover
    if Date.day == month_day[Date.month-1][2]:
        Date.day = 1
        if Date.month == 12:
            Date.month = 1
            Date.year = Date.year + 1
        else:
            Date.month = month + 1
    else:
        Date.day = Date.day + 1

new_day()
print (Date())

提前感谢大家!

mi7gmzs6

mi7gmzs61#

首先,你不能从函数中获取变量。
一种处理的方法是在Date函数中添加global year, day, month行,这将使变量year,day,month成为全局变量,这样你就可以在所有函数中使用它,在new_day中删除Date.
这应该能解决你的问题。
Date.day仅在Date是类而不是函数时才起作用。
例如:

class Date:
    def __init__(self):
        self.year = 1
        self.day = 31
        self.month = 1

Date().year # Should return 1
Date().day # Should return 31
Date().month # Should return 1

[编辑]
如果要更改年、日或月

class Date:
    def __init__(self):
        self.year = 1
        self.day = 31
        self.month = 1

    def change_year(self, to):
        self.year = to

    def change_day(self, to):
        self.day = to

    def change_month(self, to):
        self.month = to

Date().year # Should return 1
Date().day # Should return 31
Date().month # Should return 1

example = Date()
example.year # Returns 1
example.change_year(3)
example.year # Returns 3

但是最好的方法是使用global
示例

def main():
    global time
    time = 10

main()

print(time) # Prints 10

global语句在函数'global'中创建变量,换句话说,变量的行为就像它在函数之外一样。

相关问题