在python中,乙個函式就是乙個作用域
name =
'xiaoming'
defchange_name()
: name =
'sthu'
print
('在change_name裡的name:'
,name)
change_name(
)# 呼叫函式
print
("在外面的name:"
,name)
執行結果如下:
在change_name裡的name: sthu
在外面的name: xiaoming
我們再試一下在巢狀函式中是如何的尋找的?
'''
'''age =
15def
func()
:print
('第一層age:'
,age)
# 第一層age: 15
deffunc2()
: age =
73print
("func2中的age:"
,age)
# func2中的age: 73
deffunc3()
: age =
84print
("func3中的age:"
,age)
# func3中的age: 84
func3(
)# 呼叫func3函式
func2(
)# 呼叫func2函式
func(
)
在以上巢狀函式中,就能夠很好的說明乙個函式就是乙個作用域,那麼我們現在稍微改一下**看看情況?
age =
15def
func()
:print
('第一層age:'
,age)
# 第一層age: 15
deffunc2()
:print
("func2中的age:"
,age)
# func2中的age: 15 # 看到沒有,如果當前作用域裡沒有age變數,那麼它就會往上找
deffunc3()
: age =
84print
("func3中的age:"
,age)
# func3中的age: 84
func3(
)# 呼叫func3函式
func2(
)# 呼叫func2函式
func(
)
那麼,這時候有人就說了,屁話一大堆講的原來是區域性變數和全域性變數,那麼我想問:在上面這個巢狀函式中,func2中並沒有age變數,那麼它是如何找到全域性變數age = 15的?
此時我們就需要來看一下作用域的查詢順序了:
變數作用域legb
咳咳,還是先了解下什麼是命名空間把?
命名空間,又名name space,顧名思義就是存放名字的地方,存什麼名字呢?舉例說明,x = 1 ,1存放在記憶體當中,那麼變數名x存放在**呢?命名空間就是存放名字x與1繫結關係的地方
>>
> x =
1>>
>id(
1)1576430608
命名空間分為以下3種:
不同變數的作用域不同就是有這個變數所在的命名空間決定的.
作用域即範圍
讓我們來舉例看一下
'''
'''level =
'l0'
n =22
deffunc()
: level =
'l1'
n =33print
(locals()
)# 在之前說過在python中,乙個函式就是乙個作用域,這就很完美的體現了
defouter()
: n =
44 level =
'l2'
print
(locals()
,n)# 44
definner()
: level =
'l3'
print
(locals()
,n)# 44
inner(
) outer(
)func(
)
以 l --> e --> g -->b 的規則查詢,即:在區域性找不到,便會去區域性外的區域性找(例如閉包),再找不到就會去全域性找,再者去內建函式中找。 Python中的函式作用域
在python中,乙個函式就是乙個作用域 name xiaoyafei def change name name 肖亞飛 print 在change name裡的name name change name 呼叫函式 print 在外面的name name 執行結果如下 在change name裡的n...
python中函式作用域 python中函式作用域
1 作用域 如果乙個變數在def內賦值,他被定位在這個函式內 如果乙個變數在乙個巢狀的def中賦值,對於巢狀的函式來說,它非本地的 如果在def之外賦值,他就是整個檔案 2 在互動式模式下,其實是在乙個名為 main 的模板內。3 乙個函式的內部的任何型別的賦值都會把乙個名稱劃定為本地的。這包括 語...
Python 函式作用域
python中變數作用域分4種情況 x max 1,6 max為系統變數,它的作用域為python的所有模組 y 1 y為全域性變數,它的作用域為當前模組 defouter i 3 i的作用域為當前函式,包括巢狀函式 definner count 2 count為區域性變數,作用域只在當前函式有效函...