Python:name';变量';是本地和全球的

Python:name';变量';是本地和全球的,python,python-3.x,function,variables,global-variables,Python,Python 3.x,Function,Variables,Global Variables,我最近在尝试用python制作计时器应用程序时遇到了一个问题。因为我是个新手,所以我才刚刚开始学习函数 我知道,如果没有全局语句,就无法访问函数中的变量,但当我尝试这样做时,会出现以下错误: SyntaxError: name 'seconds' is local and global 从以下代码: def countdown(minutes, seconds): global minutes global seconds while (minutes*60) >

我最近在尝试用python制作计时器应用程序时遇到了一个问题。因为我是个新手,所以我才刚刚开始学习函数

我知道,如果没有全局语句,就无法访问函数中的变量,但当我尝试这样做时,会出现以下错误:

SyntaxError: name 'seconds' is local and global
从以下代码:

def countdown(minutes, seconds):
    global minutes
    global seconds
    while (minutes*60) > 0 or seconds > 0:
        seconds -= 1
        if seconds < 0:
            seconds = 59
            minutes = minutes - 1
        time.sleep(1)

    print(minutes)
    print(seconds)
def倒计时(分、秒):
全球会议记录
全局秒数
当(分*60)>0或秒>0时:
秒-=1
如果秒数小于0:
秒=59
分钟=分钟-1
时间。睡眠(1)
打印(分钟)
打印(秒)

我非常感谢您的帮助:)

每个函数都有自己的作用域。 通常,变量要么作为参数传递,要么在内部声明

这两样都可以。您首先传递它们,然后尝试从外部作为全局对象获取它们

只有在有充分理由的情况下才使用全局变量(预定义的、不能更改的参数列表等)。你在这里不需要它们

它应该是这样工作的:

import time

def countdown(minutes, seconds):
    while minutes > 0 or seconds > 0:
        print(minutes, seconds)
        time.sleep(1)
        seconds -= 1
        if seconds < 0:
            seconds = 59
            minutes = minutes - 1
    
if __name__ == "__main__":
    countdown(0, 5)
导入时间
def倒计时(分、秒):
当分钟>0或秒>0时:
打印(分钟、秒)
时间。睡眠(1)
秒-=1
如果秒数小于0:
秒=59
分钟=分钟-1
如果名称=“\uuuuu main\uuuuuuuu”:
倒计时(0,5)

我认为这不是最好的解决方案,但由于您希望将该函数集成到tkinter应用程序中,因此可以在倒计时函数的while循环中使用timeRemaining['text']=output和root.update()

像这样:

def倒计时(分、秒):
当(分*60)>0或秒>0时:
秒-=1
如果秒数小于0:
秒=59
分钟=分钟-1
时间。睡眠(1)
输出=“%02d:%02d%”(分钟,秒)
剩余时间['text']=输出
root.update()

在python3中,错误消息是
语法错误:名称“minutes”是parameter和global
,这可以更好地解释代码的问题。我如何着手解决该问题?我对理解错误消息非常陌生,因此我不完全理解错误。根据您的需要,可以删除
global
声明,也可以删除函数的参数。我将首先删除
global
s。我尝试过这样做,但当我删除全局声明时,我收到一条新的错误消息:
namererror:name'minutes'未定义
new error message::这不可能,您显然有
def倒计时(分钟,
它定义了
分钟
。感谢这一点,它似乎可以工作,但我不知道如何将它集成到我的代码中。我有一个输出变量,我需要稍后在Tkinter中使用。抱歉,我发现这很难解释,但我将把整个代码放在这里,因为这样你更容易阅读:嗯,看在您的代码中,最初的问题不是问题。Tkinter有一个连接到root的类StringVar,这是您应该使用的(否则您将无法更新文本)。