在我的数学课上,我们被告知要在python中编写一个程序。在其中一个部分中,我想测试一系列的收敛性。在编写程序时,我意识到我从根本上误解了python如何处理全局变量。拿这个代码:
Component
此代码失败,因为它表示尚未定义def main():
global n
n = 1
def check():
a = 10
if n > a: print(n)
else: n += 1
check()
main()
。但是,我无法在n
函数内部定义n,因为这会在每次迭代时将n重置为1!这个问题有一些解决方法吗?
答案 0 :(得分:3)
正如评论中已经说明的那样,n
还不在全球范围内,因为它位于嵌套函数check
中。您需要将global n
添加到check
的范围,以便从嵌套函数中访问全局n
值:
def main():
global n
n = 1
def check():
global n
a = 10
if n > a: print(n)
else: n += 1
check()
main()
@PedrovonHertwig还指出你在global n
中不需要main
(在你当前的情况下就是这种情况,如果你想在其他地方使用n
,请忽略这一点最高级别的范围)n
完全可以保留在main
的本地范围内。然后,您可以将global
中的check
关键字替换为nonlocal n
,告诉python使用不在本地范围内的n
或全局范围,但是{{1范围。