1. 程式人生 > >python學習第十天,名稱空間與作用域,函數的嵌套,global 和 nonlocal

python學習第十天,名稱空間與作用域,函數的嵌套,global 和 nonlocal

需要 oba span pen global -- python 清空 臨時空間

名稱空間:

  內置名稱空間: 在打開pytharm是加載

  全局名稱空間: 在運行py文件是加載

  局部名稱空間(臨時名稱空間) :在py文件中調用時加載

def func(): ----->函數定義

  pass ------->函數體

func()------------->函數調用

  

函數定義時:內存中只儲存與函數名的對應關系,函數體的內容不儲存

函數調用時:才執行函數體的內容,創建臨時空間,隨著函數執行結束,內存中的臨時名稱空間裏面的內容也清空 

作用域:

  全局作用域:內置名稱空間裏的內容+全局名稱空間裏的內容

  局部作用域:局部名稱空間

取值順序:

  局部--->全局--->內置 ,單向取值,不可逆.

技術分享圖片
a=10
b=20
def test5(a,b):
    print(a,b) ---> 20,10
    a=3
    b=5
    print(a,b) ---> 3,5
c = test5(b,a)
print(c) ---------> None
技術分享圖片

加載順序:

  內置名稱空間

  全局名稱空間

  局部名稱空間

函數的嵌套:

  看到調用就執行

global 和 nonlocal(當數據類型是不可變的時候需要申明,但是當數據類型是列表的時候,可以直接用append往列表添加數據,同時直接引起全局變量的改變)

  global:申明函數內的元素可以作為全局變量 (函數可以直接引用全局變量,沒有global不能改變全局變量)

  nonlocal:申明子級函數可以改變父級函數的變量 ,但nonlocal不能改變全局變量(子級函數可以直接引用父級函數的變量,沒有nonlocal不能改變父級函數的變量)

count = 1
def func1():
    count += 1 # 會報錯 # count = 2 不會報錯
    print(count)
func1() 
技術分享圖片
def func1():
    count = 666
    def inner():
        print(count)
        def func2():
            nonlocal count
            # global count
            count += 1
            print(‘func2‘,count)
        func2()
        print(‘inner‘,count)
    inner()
    print(‘func1‘,count)
func1()
print(count)

python學習第十天,名稱空間與作用域,函數的嵌套,global 和 nonlocal