1. 程式人生 > >函數變量的生命周期

函數變量的生命周期

執行 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,那樣將報錯。

函數變量的生命周期