深度剖析 變數 變數的作用域

2021-08-24 21:35:26 字數 1667 閱讀 6686

作用域的定義

作用域( scope )或者可見性是指變數在程式內的可見和可引用的範圍。

比如,全域性變數在所有的檔案都可訪問,那他的作用域就是所有檔案;

static 定義的全域性變數,只可以在定義它的原始檔中訪問,那他的作用域就是其所在的原始檔;

函式內部的區域性變數,只在其函式範圍內有效;

有些變數,只在某一塊**段內有效(花括號括起來的一段**);

使變數引用區域性化:

《**大全》這本書引入了攻擊視窗的概念:介於同乙個變數多個引用點之間的**可成為攻擊視窗,在這個視窗中新增**,可能會不當的修改此變數。

一般而言,把對乙個變數的引用區域性化,即把引用點盡可能集中在一起總是一種很好的做法。主要的好處是提高程式的可讀性和可維護性。如果變數的引用點都很集中,則閱讀**的時候,只要關注這一塊**就可以了,否則,閱讀者的目光需要在**中跳來跳去。

如何衡量變數引用的集中程度?《**大全》提到了變數跨度的概念:對變數所有引用間相隔的**行數。

test_i 的跨度總共是 2 。 test_i 的平均跨度是 2/3 。

變數的存活時間——乙個變數存在期間所跨越的語句總數。也就是從第一次引用,到最後一次引用之間跨越**的函式。

跨度表明變數引用的集中程度,存活時間表明變數經歷的語句。

如上圖所示, test_i 存活時間是 5 條語句。

低存活時間的好處:

1、 減小攻擊視窗,不易出錯。

2、 使你對**有更準確的認識(提高可讀性)

3、 減少初始化錯誤。

最後,乙個明顯的好處是便於程式重構,如果乙個程式拆分為多個小的程式,短的存活時間更有價值。

用跨度和生存時間來考察全域性變數,會發現全域性變數跨度和生存時間都很長——這是避免使用全域性變數的好的理由之一。

減小作用域的一般原則:1、

在迴圈開始之前再去初始化改迴圈裡使用的迴圈變數,而不是在該迴圈所屬的子程式的開始處初始化這些變數。

2、 直到變數即將被使用時再為其賦值。把宣告和定義放在使用之前。

3、 把相關語句放在一起。減少變數的跨度和生存時間。

4、 把相關的語句組提取成功單獨的子程式。把乙個長的子程式拆分為更小的、單獨的子程式可以縮小變數的作用域。

5、 開始時才偶那個最嚴格的可見性,然後根據需要擴充套件變數的作用域。當對變數作用域猶豫不決時,應該傾向於選擇該變數所能具有的最小的作用域:首先將變數限制於某個特定的迴圈,然後是侷限於某個子程式,其次是類的private變數, protected變數,再其次對包()可見,最後不得已的情況下再把它作為全域性變數。

關於對變數作用域的態度,取決於程式設計師如何看待「方便性」和「智力上的可管理性」。作用域越大,在寫**時越方便。但是寫出的程式更難於理解、閱讀、除錯和維護。

注:內容來自《**大全》第10章

Python 深度剖析變數的作用域

變數的作用域 乙個程式的所有的變數並不是在哪個位置都可以訪問的。訪問的許可權決定於這個變數是在 賦值的。變數的作用域決定了在哪個部分你可以訪問哪個特定的變數名稱 定義在函式內的變數擁有乙個區域性作用域,定義在函式外的擁有全域性作用域 全域性變數 在模組內,在所有函式外面,在class外面 區域性變數...

變數作用域

python任何變數都有其特定的作用域 在函式內部的變數一般只能在函式內部使用,這些只能在程式特定的區域使用的變數稱為區域性變數.在乙個檔案頂部,在函式的外部定義的變數,可以供該檔案的任何函式呼叫,這樣的變數稱為全域性變數 區域性變數和全域性變數的關係 區域性變數可以通過global關鍵字強制宣告為...

變數作用域

1 全域性變數 定義在函式外邊的變數,通常函式是無法直接獲取到外部變數的,需要獲取時得需要在函式裡加global方法 例如在外部定義乙個a 5 fu ncti onte st sum 此時是無法直接獲取到a的 方法就 是 fu ncti onte st sum echo test 2 靜態變數 st...