Python 3.x 这个Python程序有可能的解决方案吗?

Python 3.x 这个Python程序有可能的解决方案吗?,python-3.x,Python 3.x,这些问题要求检查大于10的偶数。但在执行代码后,会弹出以下错误:UnboundLocalError:assignment之前引用的局部变量“flag2” 我来自C++背景,我刚刚开始学习Python。如果可能,请提供一些解决方案 编辑:谢谢大家的精彩回答。我能够纠正我的错误。这应该可以: flag1 = True flag2 = True def test(x): if x % 2 ==0 : flag1 = True if x >=10:

这些问题要求检查大于10的偶数。但在执行代码后,会弹出以下错误:UnboundLocalError:assignment之前引用的局部变量“flag2”

我来自C++背景,我刚刚开始学习Python。如果可能,请提供一些解决方案

编辑:谢谢大家的精彩回答。我能够纠正我的错误。

这应该可以:

 flag1 = True
 flag2 = True
 def test(x):

    if x % 2 ==0 :
         flag1 = True

    if x >=10:
         flag2 = True

    return flag1 and flag2

print(test(9))
这应该起作用:

 flag1 = True
 flag2 = True
 def test(x):

    if x % 2 ==0 :
         flag1 = True

    if x >=10:
         flag2 = True

    return flag1 and flag2

print(test(9))

这是因为只有当程序进入
if
块时,
flag1
flag2
才被初始化/分配。如果<代码>如果从未通过,该怎么办
return
无法找到
flag1
和/或
flag2
。 所以-

def test(x):
    flag1 = False
    flag2 = False

    if x % 2 ==0 :
         flag1 = True

    if x >=10:
         flag2 = True

    return flag1 and flag2

print(test(9))

这是因为只有当程序进入
if
块时,
flag1
flag2
才被初始化/分配。如果<代码>如果从未通过,该怎么办
return
无法找到
flag1
和/或
flag2
。 所以-

def test(x):
    flag1 = False
    flag2 = False

    if x % 2 ==0 :
         flag1 = True

    if x >=10:
         flag2 = True

    return flag1 and flag2

print(test(9))

由于flag1和flag2未在函数内声明,因此如果第二个条件为False,则永远不会在函数中创建flag2。这就是错误产生的原因

您可以将函数中的flag1和flag2设置为全局

def test(x):

    flag1, flag2 = False, False #This statement is possible in python (because you are from C++)
    if x % 2 ==0 :
         flag1 = True

    if x >=10:
         flag2 = True

    return flag1 and flag2

由于flag1和flag2未在函数内声明,因此如果第二个条件为False,则永远不会在函数中创建flag2。这就是错误产生的原因

您可以将函数中的flag1和flag2设置为全局

def test(x):

    flag1, flag2 = False, False #This statement is possible in python (because you are from C++)
    if x % 2 ==0 :
         flag1 = True

    if x >=10:
         flag2 = True

    return flag1 and flag2
对于Python2:

flag1 = True
flag2 = True
def test(x):
    global flag1, flag2    

    if x % 2 ==0 :
         flag1 = True

    if x >=10:
         flag2 = True

    return flag1 and flag2

print(test(9))
对于Python2:

flag1 = True
flag2 = True
def test(x):
    global flag1, flag2    

    if x % 2 ==0 :
         flag1 = True

    if x >=10:
         flag2 = True

    return flag1 and flag2

print(test(9))

您可以这样使用global语句

test = lambda x: 1 - x & 1 * x / 10
或者在函数内部定义标志变量,建议在调用测试函数一次后,如果它将标志变量的值更改为True,则测试函数将在连续调用中显示异常,因此您需要在函数内部定义实例变量标志

flag1 = False
flag2 = False

def test(x):
    global flag1
    global flag2

    if x % 2 ==0 :
        flag1 = True

    if x >= 10:
        flag2 = True

    return flag2 and flag2

print(test(9))
奖励:用于理解UnboundLocalError和作用域的链接

您可以这样使用global语句

test = lambda x: 1 - x & 1 * x / 10
或者在函数内部定义标志变量,建议在调用测试函数一次后,如果它将标志变量的值更改为True,则测试函数将在连续调用中显示异常,因此您需要在函数内部定义实例变量标志

flag1 = False
flag2 = False

def test(x):
    global flag1
    global flag2

    if x % 2 ==0 :
        flag1 = True

    if x >= 10:
        flag2 = True

    return flag2 and flag2

print(test(9))
奖励:用于理解UnboundLocalError和作用域的链接
Python中的命名空间/范围规则与C++完全不同。用台词

def test(x):
    flag1 = False
    flag2 = False

    if x % 2 ==0 :
        flag1 = True

    if x >= 10:
        flag2 = True

    return flag1 and flag2

print(test(9))
很明显,您正在尝试初始化这两个变量(如在C++中),但为此 要在这里工作,必须将它们移到函数内部。此外,应将它们初始化为
False
(否则它们仅设置为
True
):

现在,为什么在函数外部初始化变量不起作用?在Python中,函数可以全局访问所有变量,而不使用
global
关键字,但至关重要的是,只能全局读取。也就是说,在模块级(功能外部)定义的
flag1
flag2
的值可以从
test
功能内部读取。但是,当编译
test
时(当您运行程序并且解析器点击“
def
行”时自动发生),编译器会看到值被写入
test
中的
flag1
flag2
,因此它得出结论,这些是局部变量,这意味着函数中的全局
flag1
flag2
将被完全忽略。这反过来意味着只有当
真时(因此对于偶数>=10,函数将运行,但否则将崩溃),才定义名称
flag1
flag2


我提供的解决方案是使
flag1
flag2
局部变量。您还可以通过将它们保留在函数外部,并向
test
函数指定允许使用
global
关键字对全局
flag1
flag2
进行读写,从而使它们成为(正确的、可写的)全局变量,如其他答案所示。我相信您知道,这通常是不推荐的。

Python中的命名空间/范围规则与C++完全不同。用台词

def test(x):
    flag1 = False
    flag2 = False

    if x % 2 ==0 :
        flag1 = True

    if x >= 10:
        flag2 = True

    return flag1 and flag2

print(test(9))
很明显,您正在尝试初始化这两个变量(如在C++中),但为此 要在这里工作,必须将它们移到函数内部。此外,应将它们初始化为
False
(否则它们仅设置为
True
):

现在,为什么在函数外部初始化变量不起作用?在Python中,函数可以全局访问所有变量,而不使用
global
关键字,但至关重要的是,只能全局读取。也就是说,在模块级(功能外部)定义的
flag1
flag2
的值可以从
test
功能内部读取。但是,当编译
test
时(当您运行程序并且解析器点击“
def
行”时自动发生),编译器会看到值被写入
test
中的
flag1
flag2
,因此它得出结论,这些是局部变量,这意味着函数中的全局
flag1
flag2
将被完全忽略。这反过来意味着只有当
真时(因此对于偶数>=10,函数将运行,但否则将崩溃),才定义名称
flag1
flag2

我提供的解决方案是使
flag1
flag2
局部变量。你可以