當你在函數定義内聲明變量的時候,它們與函數外具有相同名稱的其他變量沒有任何關系,即變量名稱對于函數來說是 局部 的。這稱為變量的 作用域 。所有變量的作用域是它們被定義的塊,從它們的名稱被定義的那點開始。
例7.3 使用局部變量
<code>#!/usr/bin/python # Filename: func_local.py</code>
<code>def </code><code>func</code><code>(x):</code>
<code> print </code><code>'x is'</code><code>, x</code>
<code> x = </code><code>2</code>
<code> print </code><code>'Changed local x to'</code><code>, x</code>
<code>x = </code><code>50</code>
<code>func(x)</code>
<code>print </code><code>'x is still'</code><code>, x</code>
(源檔案:code/func_local.py)
<code>$ python func_local.py x is 50 Changed local x to 2 x is still 50</code>
在函數中,我們第一次使用<code>x</code>的 值 的時候,Python使用函數聲明的形參的值。
接下來,我們把值<code>2</code>賦給<code>x</code>。<code>x</code>是函數的局部變量。是以,當我們在函數内改變<code>x</code>的值的時候,在主塊中定義的<code>x</code>不受影響。
在最後一個<code>print</code>語句中,我們證明了主塊中的<code>x</code>的值确實沒有受到影響。
如果你想要為一個定義在函數外的變量指派,那麼你就得告訴Python這個變量名不是局部的,而是 全局 的。我們使用<code>global</code>語句完成這一功能。沒有<code>global</code>語句,是不可能為定義在函數外的變量指派的。
你可以使用定義在函數外的變量的值(假設在函數内沒有同名的變量)。然而,我并不鼓勵你這樣做,并且你應該盡量避免這樣做,因為這使得程式的讀者會不清楚這個變量是在哪裡定義的。使用<code>global</code>語句可以清楚地表明變量是在外面的塊定義的。
例7.4 使用global語句
<code>#!/usr/bin/python # Filename: func_global.py</code>
<code>def </code><code>func</code><code>():</code>
<code> global </code><code>x</code>
<code>func()</code>
<code>print </code><code>'Value of x is'</code><code>, x</code>
(源檔案:code/func_global.py)
<code>$ python func_global.py x is 50 Changed global x to 2 Value of x is 2</code>
<code>global</code>語句被用來聲明<code>x</code>是全局的——是以,當我們在函數内把值賦給<code>x</code>的時候,這個變化也反映在我們在主塊中使用<code>x</code>的值的時候。
你可以使用同一個<code>global</code>語句指定多個全局變量。例如<code>global x, y, z</code>。