1. 程式人生 > >函數的嵌套和作用域鏈,閉包

函數的嵌套和作用域鏈,閉包

global 變量 全局 如果 local 定義 其他 閉包 限制

函數嵌套: #指在第二個函數裏面調用第一個函數的結果

def func():

  print(‘sss‘)

def func1(f):

  f()

func1(func)

作用域鏈: #最內層的函數可以調用並且更改其他函數內的代碼變量但是只限制於函數這個作用域內的變量 全局的變量不能被內部函數調用 否則會報錯

        #除非聲明global 全局變量 全局變量一般不會經常使用 因為會影響整個局面

        

def func():

  a = 1

  def func1():

   a +=1

   print(a)

  func1()

func()

其中函數名字可以作為參數的實參,也可以賦值給其他變量,也可以作為容器名字也就是內存地址

globals 無論放在函數外邊還是裏邊它都是查找全局的內存地址

locals 放在某個函數的裏邊查找的是這個函數內的所有變量 如果放在函數的最外邊則與globals一樣差的是全局內的所有變量

閉包:

def func():

  a = 1

  def func1():

    print(a)

  return func1

aa = func()

aa()

# 閉包必須嵌套函數 ,也必須是內部函數調用外部函數的變量

#閉包的好處是避免一個函數執行結束後會釋放前面的變量或者代碼 不用重復定義某個變量,節省內存

函數的嵌套和作用域鏈,閉包