我有这段代码,输出不是我期望的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)