從乙個令人意外的例子看變數作用域規則

2021-10-11 03:19:54 字數 693 閱讀 8925

讀者肯定已經很知道了什麼是區域性變數,什麼是全域性變數。大概率你也知道如果區域性變數和全域性變數重名,那麼在本地作用域內是優先使用區域性變數的。然後進一步的,本地使用全域性變數,如果只是使用,不涉及到修改,那麼可以直接使用全域性變數;如果想在本地修改全域性變數,就要在修改前使用global關鍵字宣告。

但是這還不夠,請看這個例子:

>>

> b =

6>>

>

deff2

(a):..

.print

(a)...

print

(b).

.. b =9.

..>>

> f2(3)

3traceback (most recent call last)

: file ""

, line 1,in

file ""

, line 3

,in f2

unboundlocalerror: local variable 'b' referenced before assignment

這個例子乍一看有點令人驚訝:b是全域性變數,print(b)應該沒問題啊。可事實是, python 編譯函式的定義體時, 它判斷 b 是區域性變數, 因為在函式中給它賦值了,而且沒有global關鍵字宣告。

Express高階 從乙個例子看路由分組機制

路由是express的核心功能。本文通過乙個簡單例子,介紹express的路由分組機制,以及next route 的正確使用方法。使用過express的同學都知道,通過next 將 執行權轉移到下乙個中介軟體 例子略 在官網有下面例子,出現了next route 的呼叫 a middleware s...

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

程式中的變數並不是說訪問就能訪問的,每個變數都有使用範圍,也就是變數都有自己的作用域。看示例1 示例1 b 3 deff1 a print a,b if name main f1 3 輸出結果 3 3雖然函式f1中並沒有定義b,但是可以使用全部變數b,再看示例2,可能會讓你跌眼鏡 示例2 b 3 d...

從乙個例子看Python3 x中序列解包

假如乙個字串 abcdefgh 要輸出下列格式 即 每次取出第乙個作為首,然後的字串拆成列表,放置在後面,最後成上面的輸出 一般的處理是 s abcdefgh while s front,s s 0 list s 1 print front,s a b c d e f g h b c d e f g...