python中的传递赋值
我知道这个问题已经被问过好几次了,但我仍然找不到解决问题的办法 我编写了一个函数来更改函数之外的内容(在本例中,是一个布尔变量)。虽然已知布尔变量是可变的,但我仍然无法更改它。这是我的代码:python中的传递赋值,python,parameter-passing,Python,Parameter Passing,我知道这个问题已经被问过好几次了,但我仍然找不到解决问题的办法 我编写了一个函数来更改函数之外的内容(在本例中,是一个布尔变量)。虽然已知布尔变量是可变的,但我仍然无法更改它。这是我的代码: def test() : global cont do_something = True #Actually it was something else, but for easy reading, I set it as True if do_something :
def test() :
global cont
do_something = True #Actually it was something else, but for easy reading, I set it as True
if do_something :
cont = False
def main() :
cont = True
while cont :
test()
print "Stop me"
print "HI"
main()
print "HI"
它只是进入了一个无限循环。
我知道下面的代码是有效的
def test() :
global cont
do_something = True #Actually it was something else, but for easy reading, I set it as True
if do_something :
cont = False
cont = True
print "HI"
while cont :
test()
print "Stop me"
print "HI"
这是否与全球标签有关?有人告诉我,如果我设置了一些全局性的东西,我可以在我的程序中的任何地方使用它。这是特例吗?因此,我如何才能将代码修改为功能性的(能够更改“cont”变量)谢谢。在原始代码中,
cont
insidemain()
函数是一个局部变量,而不是全局变量,因此,即使您更改了全局变量cont
insidetest()
,它不会反映在main()
中的局部变量cont
中
您必须将main()
中的cont
变量设置为全局变量
def test() :
global cont
do_something = True #Actually it was something else, but for easy reading, I set it as True
if do_something :
cont = False
def main() :
global cont
cont = True
while cont :
test()
print "Stop me"
print "HI"
main()
print "HI"
请注意,应避免使用全局变量-
而且我相信它们在python中代价高昂。还在主函数中添加了
global
语句:
def main() :
global cont
cont = True
while cont :
test()
print "Stop me"
在Python中,如果在函数中指定一个变量,并且没有为此变量添加
global
语句,那么它将始终被视为局部变量。应该避免使用global。原因是您创建的代码非常难以推理,因为到处的代码都可能发生更改,从而影响您当前试图调试或更改的代码的行为
因此,对于给定的问题,真正的解决方案是使用返回值在main
和test
之间进行通信。我对示例进行了扩充,以说明如何使用多个值作为返回,并说明如何在函数应该返回一个值,以及调用方应该继续的“元”信息的情况下应用该模式
def test():
do_continue = True # both somehow computed
value = 1000
return do_continue, value
def main():
while True:
do_continue, result = test()
if not do_continue:
break
您还需要
main
中的global const
,这是正确的,但您不应该这样做。传入变量并返回它。此外,布尔值是不可变的。我发现在解释python变量和作用域是如何工作的时候非常有用:前面的“before”是不相关的。如果在函数中的任何位置指定名称,则该名称将被视为该函数的本地名称(当然,除非它被声明为global
或nonlocal
)。