記錄乙個關於變數作用域的神奇例子

2021-10-05 06:12:12 字數 856 閱讀 3213

程式中的變數並不是說訪問就能訪問的,每個變數都有使用範圍,也就是變數都有自己的作用域。看示例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。在函式建立時,...