1. 程式人生 > >python基礎之名稱空間和作用域、函數嵌套

python基礎之名稱空間和作用域、函數嵌套

空間 dir pri 引用 value log 關系 fun ret

一、名稱空間

1、定義:存放名字與值的綁定關系

2、名稱空間分為:內置名稱空間、全局名稱空間、局部名稱空間

內置名稱空間:python解釋器自帶的名字,python解釋器啟動就會生成

全局名稱空間:文件級別定義的名字都會存放與全局名稱空間,執行python文件時會產生

局部名稱空間:定義在函數內部的名字,局部名稱空間只有在調用函數時才會生效,函數調用結束則失效

3、加載的順序:三者的加載順序:內置名稱空間->全局名稱空間->局部名稱空間

4、取值的順序:局部名稱空間->全局名稱空間->內置名稱空間7

# # max=10
# def func(): #x=1
#     # max=20
# print(max) # # # func() # max=10 # # def func(): #x=1 # max=20 # # print(max) # func() # # # print(max) # # # x=0 # def f1(): # # x=1 # def f2(): # # x=2 # def f3(): # # x=3 # print(x) # f3() # f2() # # f1()

二、作用域

1、範圍:

全局作用域:內置名稱空間與全局名稱空間的名字屬於全局範圍,在整個文件的任意位置都能被引用,全局有效

局部作用域:局部名稱空間的名字屬於局部範圍,只在函數內部可以被引用,局部有效

# x=1
# def foo():
#     def f2():
#         print(x)
#     f2()
# def bar():
#     print(x)
#
# foo()
# bar()


# def f1():
#     x=1
#     def f2(): #f2=value
#         # x=2
#         print(x)
#     f2()
# f1()


x=1
def func():
    x=2
    def f1():pass
    #
print(dir(globals()[‘__builtins__‘])) #全局作用域name # print(locals()) #局部作用域name func() print(globals() is locals())

2、作用順序是:局部作用域》》》》》》全局作用域

三、函數嵌套

1、函數的嵌套定義

def f1():
    def f2():
        def f3():
            print(from f3)
        print(from f2)
        f3()
    print(from f1)
    f2()
# print(f1)
f1()

2、函數的嵌套調用

def max2(x,y):
     if x > y:
        return x
     else:
        return y

def max4(a,b,c,d):
    res1=max2(a,b) #23
    res2=max2(res1,c) #23
    res3=max2(res2,d) #31
    return res3
print(max4(11,23,-7,31))

python基礎之名稱空間和作用域、函數嵌套