C++基礎-多執行緒擴充套件繼承(public:thread)
名稱空間
名稱空間:(namespace)存放名字的地方,是對棧區的劃分,聽了一種在相同專案中避免名字衝突的方法
有了名稱空間之後我們就可以在棧區存放相同的名字,詳細的名稱空間分為三種
1.1 內建名稱空間
存放的是python直譯器內建的名字 英文為 built-in
>>> print
<built-in function print>
>>> input
<built-in function input>
存活週期:python直譯器啟動則產生,python直譯器關閉則銷燬
1.2 全域性名稱空
只要不是函式內定義、也不是內建的、剩下的都是全域性名稱空間的名字,即模組中的變數,包括函式、類、其它匯入模組、模組級的變數和常量 英文為 global
import os # 模組
x = 10. # 變數名
if 13 > 3:
y = 20 # 也屬於全域性名稱空間
def func(): # 函式名
a = 1
b = 2
存活週期:該檔案執行則產生,檔案執行完畢之後銷燬
1.3 區域性名稱空間
在函式內定義的名稱,包括函式引數,區域性定義的變數 英文為local
x = 10 # x為全域性名稱
def func():
a = 20 # a是區域性名稱
def func2():
b = 30. # b是內嵌的區域性名稱
存活週期:呼叫執行函式體程式碼時存活,呼叫完畢後銷燬
1.4 名稱空間查詢優先順序
在當前位置向上一層一層查詢
內建名稱空間=>全域性名稱空間=>區域性名稱空間
如果當前區域性名稱空間:區域性的名稱空間去-> 全域性名稱空間 -> 內建名稱空間
如果當前在全域性名稱空間:全域性名稱空間=>內建名稱空間
注意:無法向內查詢,只能向外層一層一層查詢
作用域
作用域即作用範圍
全域性作用域:內建名稱空間,全域性名稱空間
1、全域性存活
2、全域性有效,被所有函式共享
區域性作用域:區域性名稱空間
1、臨時存活
2、區域性有效,函式內有效
-
L(Local):最內層,包含區域性變數,比如一個函式/方法內部。
-
E(Enclosing):包含了非區域性(non-local)也非全域性(non-global)的變數。比如兩個巢狀函式,一個函式(或類) A 裡面又包含了一個函式 B ,那麼對於 B 中的名稱來說 A 中的作用域就為 nonlocal。
-
G(Global):當前指令碼的最外層,比如當前模組的全域性變數。
-
B(Built-in): 包含了內建的變數/關鍵字等,最後被搜尋。
注意:名稱空間的巢狀關係是以函式定義為準生成的,與呼叫位置無關
def foo():
print(x)
def bar():
x = 111
foo()
x = 100
bar() # bar()的輸出結果為100
global 與 nonlocal關鍵字
當局部作用域想修改成為全域性作用域變數時,就需要用到global關鍵字
x = 1
def func():
global x # global關鍵字宣告
x = 100
print(x)
print(x) # 此時全域性變數x已經被修改 x = 100
func() # 100
nonlocal關鍵字用來修改巢狀作用域,即enclosing作用域,通俗的來說,即巢狀的外一層的變數,不會修改全域性中的變數
def outer():
x = 10
def inner():
nonlocal x # nonlocal 關鍵字宣告
x = 555
print(x)
inner()
print(x)
outer() # 輸出結果為555 555