恩?為什麼Function中的變數都抓不到呢?Python 全域與區域變數-初學者系列

zino lin
誤闖數據叢林的商管人Zino
4 min readJun 18, 2020

--

相關文章:
一個觀念,開啟Python 網路爬蟲成長之路!(含全系列連結)
Python爬下PTT文章內容技巧(含程式碼)

在上次《新手入門 Python Function》出來後,有網友推薦我一起把全域與區域變數一起講一下。所以就來聊聊全域變數與區域變數吧。新手有時候會有個疑問:

為什麼 Function中的變數在Function外都抓不到呢?

答案是:因為在Function中的變數是區域變數喔!

Python 示意圖 。Photo by Chris Ried on Unsplash

根據全域變數與區域變數官方文件所說為:

What are the rules for local and global variables in Python?

In Python, variables that are only referenced inside a function are implicitly global. If a variable is assigned a value anywhere within the function’s body, it’s assumed to be a local unless explicitly declared as global.

什麼意思呢? 我直接用我自己的觀點帶上範例跟大家解說吧!

全域變數

通常我們初學者一開始學Python 時,必學一個東西叫做”變數”。我們會在任意程式中給予一個變數名稱並等於一個,沒意外這些都是全域變數。尤其是你會發現通常他們都沒有任何的縮排。全域變數都有個特性:

只要是在同一個Python檔案中,任何區塊都可以呼叫到這個變數。

A、B 給值後,被預設宣告為全域變數。

區域變數

區域邊數與全域變數沒有任何不同,一樣都是給予一個變數名稱並等於一個。關鍵的差異在於這個變數被宣告在哪個區域。區域變的特性是:

區域變數只能在特定區域內才可以被程式呼叫。

什麼意思呢?我們來看一個範例:

你可以看到在 tmp 變數被給予值的區域是在名為Sum Function中。在Function區域外並沒有被給予任何數值。所以在這裡的tmp 就是一個區域變數。執行的話會是:

tmp 錯誤為:此變數沒有被宣告喔!

如果看不懂def 的意思可以參考:《新手入門 Python Function

如何抓到Function中的區域變數呢?

曾經有個初學者問我如何抓到Function 中的變數。讓我很好奇問他抓取區域變數的目的?意外非常單純的說:只是想要Debug 看看這個變數在這個Function中,懶得return出來。讓我哭笑不得XDD 當然可以只要在變數中加上global就可以了!

把tmp 宣告為 global

但是強烈不建議使用global 宣告

因為域變數的目的很簡單。就是為了保護該變數在Function的執行過程中變數不會被任意其他程式區塊影響。所以是故意這樣設置的。

你想想看如果你的Function 在執行時,中間的變數突然被修改過了。你在Debug Function時不就更容易搞不清楚到底是錯Function,還是外面呼叫的程式呢? 所以最好的方式還是把要用的變數Return出來喔

程式碼:

--

--

zino lin
誤闖數據叢林的商管人Zino

HI!我是Zino! 我曾任數據分析新創CTO且擔任過資策會與外貿協會Python講師。目前回到學界當菸酒生中。努力分享自己的經驗與所常!幫助更多人前進💪