命名空間

命名空間

內置名稱空間

計算機或程序底部自有的空間python

全局名稱空間

全局名稱空間包括全局空間和內置空間,能夠訪問第一層的內容函數

 局部名稱空間

局部的空間,沒有內置和全局權限大ui

a = 10 # 全局名稱空間中的內容
b = 10
def fn(): # fn也在全局名稱空間
    b = 20 # 局部名稱空間
print(b)
def gn():
    a = 30
    print(a)
fn() >>>#結果: 10
gn() >>>#結果: 30

做用域

全局做用域

內置+全局spa

能夠訪問所有的內容,也有權修改code

局部做用域

局部(函數被調用)blog

只可修改當前參差空間的內容,若是想修改全局做用域的內容在第一行寫global+調用的內容,再加以修改作用域

globals() 查看全局中的內容

locals() 查看當前做用域中的內容

a = 110 # 全局
def fn(): #
    b = 20 # 局部
    def gn(): # 局部
        print(globals())  # 能夠查看全局做用域中的內容 :>>> '__name__': '__main__', '__doc__': None, 
        # '__package__': None, '__loader__': 
        # <_frozen_importlib_external.SourceFileLoader object at 0x00000150A1ECFEF0>,
        #  '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__':
        #  'E:/python全棧15期/day11/code/04 名稱空間.py', '__cached__': None, 
        # 'a': 110, 'fn': <function fn at 0x00000150A1E8C1E0>} >>>(a在全局中,fn也在全局中)

        print(locals())  # 查看當前做用域中的內容  >>> 當前層次局部做用域沒有內容,因此返回一個{}
    gn()
fn()  #先調用 函數 fn 再定義函數gn,再調用函數gn

函數嵌套

函數能夠互相的嵌套io

a = 1         # 01
def fun_1():   #03
    a = 2         # 05
    def fun_2(): #07
        global a
        a = 3       #09
        def fun_3():   #11
            a = 4        #13
            print(a)     #14 
        print(a)    #10 >>>結果: 3
        fun_3()     # 12 >>>結果:函數fun_3最後是 4
        print(a)      #15>>> 結果 :  3
    print(a)       #06 >>>結果:2
    fun_2()       #08
    print(a)        #16 >>> 結果: 2
print(a)     #02   >>> 結果: 1
fun_1()      #04   >>>fun_1函數最終結果 2
print(a)      # 17 >>>  結果: 3
               #>>> 因此最終輸出爲 1,2,3,4,3,2,3

 

global和nonlocal關鍵function

a = 30
def func():
    print(a)


func() >>> # 30
print(a) >>>#30

 

global: 在局部訪問全局中的內容

a = 30
def func():
    global a  # 1. 能夠把全局中的內容引入到函數內部 , 2. 在全局建立一個變量
    a = 20
    print(a) 


func() >>> # 結果: 20
print(a) >>>#結果: 20   global把全局那個變量a 修改了

nonlocal: 在局部尋找外層函數中離他最近的那個變量

a = 10
def outer():
    a = 40
    def inner(): # 在inner中改變a的值
        nonlocal a # 尋找外層函數中離他最近的那個變量,但不會找到全局那個變量
        print(a)    #  40
    inner()
outer()  >>> # 結果 40
print(a) >>> # 結果 10
相關文章
相關標籤/搜索