程式中的變數並不是說訪問就能訪問的,每個變數都有使用範圍,也就是變數都有自己的作用域。看示例1
示例1
b =3
deff1
(a):
print
(a,b)
if __name__ ==
"__main__"
: f1(3)
#輸出結果: 3 3
雖然函式f1中並沒有定義b,但是可以使用全部變數b,再看示例2,可能會讓你跌眼鏡
示例2
b =3
deff1
(a):
print
(a,b)
b =1if __name__ ==
"__main__"
: f1(3)
#unboundlocalerror: local variable 'b' referenced before assignment
在示例2中,居然說區域性變數b沒有定義,真是神了個奇,b不是可以列印嗎,因為有個全域性變數b,然後變數b再賦值。可事實上,python編譯函式的定義體時,它判斷b是區域性變數,因為函式中給它賦值了。但是列印b時候還沒有,b還沒有被賦值,所以報錯了!
如果想讓解釋把後面賦值的b當成全域性變數,可以加上語句:global b,見示例3
示例3
b =3
deff1
(a):
global b
print
(a,b)
b =1if __name__ ==
"__main__"
: f1(
3)
記錄乙個神奇的失誤
在使用mybatis generator生成了xml檔案之後,查詢語句是這個樣的 select from hjt bill where id 我想著照著這個寫乙個多個鍵值查詢的select語句,於是寫成了這樣 select from bill where bill num and type 然後死活...
乙個有關Golang變數作用域的坑
臨近下班前編寫和除錯一段golang 但執行結果始終與期望不符,怪異的很,下班前依舊無果。demo如下 package main import fmt var p int func foo int,error func bar func main bar fmt.println p 這段 原意是定義...
乙個關於JS作用域鏈的例子
乙個關於js作用域鏈的例子,如下 1 var x 10 function foo function 執行結果 2 var x 10 function foo function 執行結果 簡單分析 兩段 唯一的區別是第6行,即匿名函式中對變數x的賦值。1,var x 20,2,x 20。在函式建立時,...