函數變量的生命周期
阿新 • • 發佈:2017-09-18
執行 date int and log ffffff utf color pre
#!/usr/bin/env python #coding:utf-8 #@Author:Andy # Date: 2017/6/14 # x = 1 # def foo(): # x = 10000 # print(x) # # foo() # print(x)
運行上面的代碼會先後打印出:10000, 1。
執行foo函數後,x=10000的生命周期在foo函數內部,當此函數執行完後即消失,
接著執行print(x), 此時內部的x=10000已經銷毀,只有全局變量x=1,所以打印1
x=1 def f(): x = 2 # 生命周期在f def f2(): x = 3 # 生命周期在f2 def f3(): nonlocal x # 會延伸到f2,限f2內部 print(x) x = 4 f3() f2() f()
此咱情況下最後打印的結果為3。
如果沒有nonlocal x ,將會報錯,因為nonlocal使得f3內部的x變量可以突破當前局部變量的限制
向上延伸到f2函數內部,如果f2內容仍沒有找到x,那將繼續到f內部,但仍然無法突破局部變量的限制,
無法延伸到全局變量的範圍。但不能在nonlocal前面再定義一次x,那樣將報錯。
函數變量的生命周期