变量没有从函数返回正确的值



我有这段代码,输出不是我期望的1,而是0。

x = 1
def winconditions():
if x == 1:
pwin = 1
return pwin
pwin = 0
while pwin == 0:
winconditions()
print (pwin)

必须将变量pwin声明为全局变量:

def winconditions():
global pwin
if x == 1:
pwin = 1

否则将是一个局部变量,它不会对在函数外声明的pwin变量产生任何影响。

请注意,使用全局变量通常是一种糟糕的编程风格。这可能是一个有趣的阅读:全局变量不好吗?

当您将pwin = 1设置在winconditions中时,您正在创建本地变量pwin并返回它,您没有修改全局pwin

x = 1
def winconditions():
global pwin # This is needed to modify the external variable
if x == 1:
pwin = 1
return pwin
pwin = 0
while pwin == 0:
winconditions()
print (pwin)

在while循环中设置pwin的值为winconditions()

pwin = wincondition()

这里有一个作用域问题,因为在声明变量pwin之前声明了函数wincondition

你可以只需将global声明添加到pwin变量

x = 1
def winconditions():
if x == 1:
global pwin  # <--- Edited line
pwin = 1
return pwin
pwin = 0
while pwin == 0:
winconditions()
print (pwin)

默认情况下,函数中声明的变量是局部作用域。如果你想全局声明它,你可以使用global关键字,像这样:

def win_conditions():
global pwin
if x == 1:
pwin = 1
return pwin

然而,在函数中设置全局变量通常是一个不好的做法。相反,您可以在while循环中使用walrus操作符,该操作符是在3.8中添加的。

x = 1
def win_conditions():
if x == 1:
pwin = 1
return pwin
while (pwin := win_conditions()) == 0:
print (pwin)

或者,只需将变量pwin设置为函数的输出:

x = 1
def win_conditions():
if x == 1:
pwin = 1
return pwin
pwin = 0
while pwin == 0:
pwin = win_conditions()
print (pwin)

最新更新