1. 程式人生 > >Python3學習筆記-10(變數的作用域)

Python3學習筆記-10(變數的作用域)

一、變數的作用域

Python的作用域一共有4種,分別是:

L (Local) 區域性作用域 E (Enclosing) 閉包函式外的函式中 G (Global) 全域性作用域 B (Built-in) 內建作用域 以 L –> E –> G –>B 的規則查詢,即:在區域性找不到,便會去區域性外的區域性找(例如閉包),再找不到就會去全域性找,再者去內建中找。 #內建作用域 a = int(3.2) #全域性作用域 b = 0

def outer(): #閉包函式外的函式中 c = 10 def inner(): #區域性作用域 d = 100 Python 中只有模組(module),類(class)以及函式(def、lambda)才會引入新的作用域,其它的程式碼塊(如 if/elif/else、try/except、for/while等)是不會引入新的作用域的,也就是說這些語句內定義的變數,外部也可以訪問

二、全域性變數和區域性變數

定義在函式內部的變數擁有一個區域性作用域,定義在函式外的擁有全域性作用域。

區域性變數只能在其被宣告的函式內部訪問,而全域性變數可以在整個程式範圍內訪問。

例:

a = 0 #全域性變數

def demo(): b = 10 #區域性變數 三、global 和 nonlocal關鍵字

當內部作用域想修改外部作用域的變數時,就要用到global和nonlocal關鍵字了。

例:

a = 0

def demo(): global a #使用global關鍵字宣告 print(a) a = 100 #修改a的值 print(a)

demo() 輸出結果如下:

0 100 如果要修改巢狀作用域(enclosing 作用域,外層非全域性作用域)中的變數則需要 nonlocal 關鍵字了

例:

def outer(): a = 0 def inner(): nonlocal a #使用nonlocal關鍵字宣告 print(a) #輸出修改之前的值 a = 100 #修改a的值 print(a) #輸出修改後的值 inner() #呼叫內部函式 print(a) #輸出呼叫內部函式後,外部函式中a的值 outer() 輸出結果如下:

0 100 100