递归函数的Python全局变量

时间:2017-05-27 01:31:59

标签: python

在我的数学课上,我们被告知要在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!这个问题有一些解决方法吗?

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范围。