1. 程式人生 > >作用域和名稱空間

作用域和名稱空間

名稱空間: 用來存放名字(變數, 函式名, 類名, 引入的模組名)的

1. 全域性名稱空間: 我們在py檔案中自己寫的變數, 函式.....
2. 內建名稱空間: 我們python直譯器提供好的一些內建內容(print, input....)
3. 區域性名稱空間: 在我們執行函式的時候.會產生一個區域性名稱空間. 放的是: 函式內部的內容(變數, 函式,類...)

名稱空間可能會有無數個, 區域性名稱空間而言. 相對是獨立的.一般互不干擾

作用域:
1. 全域性作用域: 內建+全域性
2. 區域性作用域: 區域性

globals() 檢視全域性作用域
locals() 檢視當前作用域

# a = 10
#
# lst = [1,2,3,4]
#
# # 內建函式
# print("你好啊,我叫賽利亞")
#
# def chi():
#     a = 10
#     b = 20
#
#
# # 如果不呼叫chi() chi中的a和b都不會建立
# # 如果呼叫了chi() 會建立a,b
# chi()

# def chi():
#     a = 10
#     print(a)
#
# chi()
# print(a) # 報錯

# def print(b):
#     pass
#
# a = 10
# def chi():
#     print(a)
#
# chi()

# 從全域性去找區域性 -> 找不到
# 區域性去找全域性 -> 可以找到

# 怎麼檢視全域性和區域性中的內容
# a = 10
# b = 20
#
# def 今天又是星期五():
#     pass
#
# # 檢視全域性作用域中的內容
# print(globals()) # globals 全域性作用域: 內建+全域性名稱空間
# '''
# {'__name__': '__main__', '__doc__': None, '__package__': None,
# '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000000000265C080>,
# '__spec__': None, '__annotations__': {},
# '__builtins__': <module 'builtins' (built-in)>, => print, input open
# '__file__': 'D:/python_workspace_s18/day10 函式的進階/04 名稱空間和作用域.py',
# '__cached__': None,
# # 自己寫的. 全域性
# 'a': 10, 'b': 20, '今天又是星期五': <function 今天又是星期五 at 0x0000000001D42E18>}
# '''
#

def chi():
    a = 20
    b = 30
    print(locals()) # 檢視當前作用域中的內容
    print(globals()) # alex,老男孩兒, 武sir, 全域性作用域中的內容
chi()

# print(locals()) # 全域性
# print(globals()) # 全域性