python 中,程式的變數並不是在哪個位置都可以訪問的,訪問許可權決定於這個變數是在**賦值的。
變數的作用域決定了在哪一部分程式可以訪問哪個特定的變數名稱。python的作用域一共有4種,分別是:
以 l –> e –> g –>b 的規則查詢,即:在區域性找不到,便會去區域性外的區域性找(例如閉包),再找不到就會去全域性找,再者去內建中找。
xpython 中只有模組(module),類(class)以及函式(def、lambda)才會引入新的作用域,其它的**塊(如 if/elif/else/、try/except、for/while等)是不會引入新的作用域的,也就是說這些語句內定義的變數,外部也可以訪問,如下**:=int
(2.9
)# 內建作用域
g_count =0
# 全域性作用域
defouter
():o_count =1
# 閉包函式外的函式中
definner
():i_count =2
# 區域性作用域
>>>例項中 msg 變數定義在 if 語句塊中,但外部還是可以訪問的。iftrue
:...
msg
='i am from runoob'
...>>>
msg'i am from runoob'
>>>
如果將 msg 定義在函式中,則它就是區域性變數,外部不能訪問:
>>>從報錯的資訊上看,說明了 msg_inner 未定義,無法使用,因為它是區域性變數,只有在函式內可以使用。deftest
():...
msg_inner
='i am from runoob'
...>>>
msg_inner
traceback
(most recent call
last
):file"",
line 1,
innameerror
:name
'msg_inner'
isnot
defined
>>>
對於變數作用域,變數的訪問以 l(local) –> e(enclosing) –> g(global) –>b(built-in) 的規則查詢,即:在區域性找不到,便會去區域性外的區域性找(例如閉包),再找不到就會去全域性找,再者去內建中找。
觀察以下幾個例子,均從內部函式輸出變數 x:
1. 區域性作用域
x執行結果為 2,因為此時直接在函式 inner 內部找到了變數 x。=int
(3.3)x
=0defouter
():x =1
definner
():x =2
print(x
)inner
()outer
()
2.閉包函式外的函式中
x執行結果為 1,因為在內部函式 inner 中找不到變數 x,繼續去區域性外的區域性——函式 outer 中找,這時找到了,輸出 1。=int
(3.3)x
=0defouter
():x =1
definner
():i =2
print(x
)inner
()outer
()
3.全域性作用域
x執行結果為 0,在區域性(inner函式)、區域性的區域性(outer函式)都沒找到變數 x,於是訪問全域性變數,此時找到了並輸出。=int
(3.3)x
=0defouter
():o =1
definner
():i =2
print(x
)inner
()outer
()
4. 內建作用域
x執行結果為 3,在區域性(inner函式)、區域性的區域性(outer函式)以及全域性變數中都沒有找到變數x,於是訪問內建變數,此時找到了並輸出。=int
(3.3)g
=0defouter
():o =1
definner
():i =2
print(x
)inner
()outer
()
python 3 基礎 print 函式
最白話的語言來和大家一起學習python print 是python中最常用的輸出方式 待輸出資料 可以是字串,整數,浮點數,字典,元組,列表等 print 一起學python 輸出字串 一起學python print 1412 輸出數字 1412 str string1 print str 輸出變...
Python3學習筆記09 匿名函式lamdba
關鍵字lambda表示匿名函式,冒號前面,面的x表示函式引數。匿名函式有個限制,就是只能由乙個表示式,不用寫return,返回值就是該表示式的結果。匿名函式有個好處,因為函式沒有名字,不必擔心函式名稱衝突。此外,匿名函式也是乙個函式物件,也可以把匿名函式賦值給乙個變數,再利用變數來呼叫該函式 f l...
python3基礎 常用內建函式
目錄 input函式 lambda 函式 匿名函式 repr 函式 type函式 判斷變數型別 map函式 filter函式 reduce函式 捕獲的是最原始的輸入,將所 有的輸入按照字串進行處理,並返回乙個字串,不包含回車。語法 lambda arg1 agr2,argn expression 示...