全菊變數和菊部變數

2021-09-11 17:21:00 字數 2933 閱讀 5109

王菊這波熱點來得莫名其妙啊,讓我們這些「菊外人」一臉懵逼。

前陣子還自我吐槽了下文章的選題,熱點沒營養,乾貨沒人看。這下好了,找到了熱點與乾貨的完美結合?

是誰的小眼睛,還沒看crossin老師?

明確地說,我今天就是來蹭熱點話題流量的。(雖然我覺得事件本身也挺有意思的,已成路人粉)

如果你對此感到不適,或對於變數作用域的相關概念已了然於心,那後面的內容就不必看了,謝謝!

但根據我的經驗,幾乎所有的程式設計學習者在開始用函式不久之後,都踩過區域性變數的坑。幾乎每個星期,都會有人在答疑群、知識星球、論壇、微博上問到關於作用域使用不當而導致的問題。(昨天我在微博上剛回答了乙個)

所以,如果通過這個略有點惡趣味的熱點事件能讓你記住「全域性變數」、「區域性變數」、「形參」、「實參」、「變數作用域」這幾個概念,我覺得也挺好啊。

這些內容,在我們的教程裡都有,包含在了:

【python 第67課】函式的引數傳遞 | 【python 第71課】變數的作用域

這裡再幫大家理一下。

首先來看這樣一段**:

def

func(x

):print

('x =',x

)y=10

x+=yprint

('x =',x

)returnxa

=5b=

func(a

)print

('a =',a

)print

('b =',b

)複製**

輸出:

x = 5

x = 15

a = 5

b = 15

複製**

這裡,函式 func 的形參是 x,它只在函式內部有效,也就是作用域僅在函式中,如果在外部呼叫它,就會報錯。

變數a 作為實參傳遞給函式 func,所以函式裡 x 的值就是 a 的值,但x 不是 a,只是現在它倆一樣。

變數 y 是函式中定義的區域性變數,它的作用域同樣也僅在函式中。

對 x 進行賦值之後,x 的值發生了變化,但不會影響實參 a 的值。

函式的返回值是 x的值,並賦值給了外部的變數 b,所以 b 的值就是 x 的值,但 b 不是 x,此時 x 已不存在。

理解了上面幾條之後,我們再修改一下函式:

def

func(x

):print

('x =',x

)x=10

x+=xprint

('x =',x

)returnxx

=5func(x

)print

('x =',x

)複製**

輸出:

x = 5

x = 20

x = 5

複製**

解讀一下:

函式 func 的形參是 x

外部變數 x作為實參傳遞給函式 func,所以函式裡 x 的值就是外部 x 的值,但這兩個 x 是兩個不同的變數,只是現在值一樣。

變數 x 在函式中被重新賦值 10,但不會影響外部變數 x 的值。

對 x 自身做了累加,此時 x 變成 20。

函式的返回值是 x的值,但沒有賦值給任何變數,所以此返回值沒任何作用,函式結束。

外部的變數 x 仍然是一開始的值 5。

但在初學階段,不建議你這麼給變數命名,可能會把自己繞進去。把**寫清楚,多定義幾個變數,多分幾行**,反正也不要錢。(除非你是做區塊鏈程式開發)

那如果要在函式內部修改外部的變數可不可以呢?

可以,用全域性變數。

def

func

():globalxx

=10x=

5func

()print

('x =',x

)複製**

輸出:

x = 10

複製**

在函式中宣告global x,程式就會知道這個x 是乙個全域性變數。此時的 x 就是外部的 x,給它賦值的結果自然在函式結束後依然有效。

但這種情況下,你不能再同時將 x 設定為函式的形參。

如果你僅僅需要在函式內部讀取外部的引數值而不用修改它的值,那麼 global 的宣告就不再需要。

def

func

():y=x

print

('y =',y

)x=5

func

()print

('x =',x

)複製**

輸出:

y = 5

x = 5

複製**

寫入時 global 的必要在於區分全域性變數和區域性變數,而讀取不存在這樣的問題。

最後留乙個思考題:

def

func(m

):m[0

]=20m

=[4,

5,6]

returnml

=[1,

2,3]

func(l

)print

('l =',l

)複製**

思考一下輸出會是什麼?

如何自學python | 新手引導 | 精選

python

問答 | python單詞表 | 區塊鏈 | 人工智慧 | 雙11 | 嘻哈 | 爬蟲 | 排序演算法

4 11 區域性變數和全域性變數

在乙個函式內部定義的變數是內部變數,它只在本函式範圍內有效,也就是說只有在本函式內才能使用它們,在此函式以外是不能使用這些變數的。同樣,在復合語句中定義的變數只在本復合語句範圍內有效。這稱為 區域性變數 local variable 如 對區域性變數的一些說明 1 主函式main中定義的變數 m,n...

變數提公升全解析

1.變數的提公升 將變數的宣告提公升到執行環境的最頂端 console.log a 輸出結果 undefined var a 10 相當於 var a console.log a 輸出結果 undefined var a 10 1.0注 函式的引數,相當遠在函式體內宣告了區域性變數 var a 0 ...

python 09 區域性變數和全域性變數

區域性變數是在函式內部定義的變數,只能在函式內部使用 全域性變數是在函式外部定義的變數 沒有定義在某 個函式內 所有函式內部都可以使用這個變數 提示 在其他的開發語言中,大多不推薦使用全域性變數 可變範圍太大,導致程式不好維護 區域性變數是在函式內部定義的變數,只能在函式內部使用 函式執行結束後,函...