
- Python基礎
- Python - 首頁
- Python - 概述
- Python - 歷史
- Python - 特性
- Python vs C++
- Python - Hello World程式
- Python - 應用領域
- Python - 直譯器
- Python - 環境搭建
- Python - 虛擬環境
- Python - 基本語法
- Python - 變數
- Python - 資料型別
- Python - 型別轉換
- Python - Unicode系統
- Python - 字面量
- Python - 運算子
- Python - 算術運算子
- Python - 比較運算子
- Python - 賦值運算子
- Python - 邏輯運算子
- Python - 位運算子
- Python - 成員運算子
- Python - 身份運算子
- Python - 運算子優先順序
- Python - 註釋
- Python - 使用者輸入
- Python - 數字
- Python - 布林值
- Python控制語句
- Python - 控制流
- Python - 決策
- Python - if語句
- Python - if else
- Python - 巢狀if
- Python - match-case語句
- Python - 迴圈
- Python - for迴圈
- Python - for-else迴圈
- Python - while迴圈
- Python - break語句
- Python - continue語句
- Python - pass語句
- Python - 巢狀迴圈
- Python函式與模組
- Python - 函式
- Python - 預設引數
- Python - 關鍵字引數
- Python - 僅限關鍵字引數
- Python - 位置引數
- Python - 僅限位置引數
- Python - 可變引數
- Python - 變數作用域
- Python - 函式註解
- Python - 模組
- Python - 內建函式
- Python字串
- Python - 字串
- Python - 字串切片
- Python - 修改字串
- Python - 字串連線
- Python - 字串格式化
- Python - 跳脫字元
- Python - 字串方法
- Python - 字串練習
- Python列表
- Python - 列表
- Python - 訪問列表元素
- Python - 修改列表元素
- Python - 新增列表元素
- Python - 刪除列表元素
- Python - 迴圈遍歷列表
- Python - 列表推導式
- Python - 排序列表
- Python - 複製列表
- Python - 合併列表
- Python - 列表方法
- Python - 列表練習
- Python元組
- Python - 元組
- Python - 訪問元組元素
- Python - 更新元組
- Python - 解包元組
- Python - 迴圈遍歷元組
- Python - 合併元組
- Python - 元組方法
- Python - 元組練習
- Python集合
- Python - 集合
- Python - 訪問集合元素
- Python - 新增集合元素
- Python - 刪除集合元素
- Python - 迴圈遍歷集合
- Python - 合併集合
- Python - 複製集合
- Python - 集合運算子
- Python - 集合方法
- Python - 集合練習
- Python字典
- Python - 字典
- Python - 訪問字典元素
- Python - 修改字典元素
- Python - 新增字典元素
- Python - 刪除字典元素
- Python - 字典檢視物件
- Python - 迴圈遍歷字典
- Python - 複製字典
- Python - 巢狀字典
- Python - 字典方法
- Python - 字典練習
- Python陣列
- Python - 陣列
- Python - 訪問陣列元素
- Python - 新增陣列元素
- Python - 刪除陣列元素
- Python - 迴圈遍歷陣列
- Python - 複製陣列
- Python - 反轉陣列
- Python - 排序陣列
- Python - 合併陣列
- Python - 陣列方法
- Python - 陣列練習
- Python檔案處理
- Python - 檔案處理
- Python - 寫入檔案
- Python - 讀取檔案
- Python - 重新命名和刪除檔案
- Python - 目錄
- Python - 檔案方法
- Python - OS檔案/目錄方法
- Python - OS路徑方法
- 面向物件程式設計
- Python - OOPs概念
- Python - 類與物件
- Python - 類屬性
- Python - 類方法
- Python - 靜態方法
- Python - 建構函式
- Python - 訪問修飾符
- Python - 繼承
- Python - 多型
- Python - 方法重寫
- Python - 方法過載
- Python - 動態繫結
- Python - 動態型別
- Python - 抽象
- Python - 封裝
- Python - 介面
- Python - 包
- Python - 內部類
- Python - 匿名類和物件
- Python - 單例類
- Python - 包裝類
- Python - 列舉
- Python - 反射
- Python錯誤與異常
- Python - 語法錯誤
- Python - 異常
- Python - try-except塊
- Python - try-finally塊
- Python - 丟擲異常
- Python - 異常鏈
- Python - 巢狀try塊
- Python - 使用者自定義異常
- Python - 日誌記錄
- Python - 斷言
- Python - 內建異常
- Python多執行緒
- Python - 多執行緒
- Python - 執行緒生命週期
- Python - 建立執行緒
- Python - 啟動執行緒
- Python - 加入執行緒
- Python - 執行緒命名
- Python - 執行緒排程
- Python - 執行緒池
- Python - 主執行緒
- Python - 執行緒優先順序
- Python - 守護執行緒
- Python - 執行緒同步
- Python同步
- Python - 執行緒間通訊
- Python - 執行緒死鎖
- Python - 中斷執行緒
- Python網路程式設計
- Python - 網路程式設計
- Python - Socket程式設計
- Python - URL處理
- Python - 泛型
- Python庫
- NumPy教程
- Pandas教程
- SciPy教程
- Matplotlib教程
- Django教程
- OpenCV教程
- Python雜項
- Python - 日期與時間
- Python - 數學
- Python - 迭代器
- Python - 生成器
- Python - 閉包
- Python - 裝飾器
- Python - 遞迴
- Python - 正則表示式
- Python - PIP
- Python - 資料庫訪問
- Python - 弱引用
- Python - 序列化
- Python - 模板
- Python - 輸出格式化
- Python - 效能測量
- Python - 資料壓縮
- Python - CGI程式設計
- Python - XML處理
- Python - GUI程式設計
- Python - 命令列引數
- Python - 文件字串
- Python - JSON
- Python - 傳送郵件
- Python - 擴充套件
- Python - 工具/實用程式
- Python - GUIs
- Python高階概念
- Python - 抽象基類
- Python - 自定義異常
- Python - 高階函式
- Python - 物件內部機制
- Python - 記憶體管理
- Python - 元類
- Python - 使用元類進行超程式設計
- Python - 模擬和存根
- Python - Monkey Patching
- Python - 訊號處理
- Python - 型別提示
- Python - 自動化教程
- Python - Humanize包
- Python - 上下文管理器
- Python - 協程
- Python - 描述符
- Python - 診斷和修復記憶體洩漏
- Python - 不可變資料結構
- Python有用資源
- Python - 問答
- Python - 線上測驗
- Python - 快速指南
- Python - 參考
- Python - 速查表
- Python - 專案
- Python - 有用資源
- Python - 討論
- Python編譯器
- NumPy編譯器
- Matplotlib編譯器
- SciPy編譯器
Python變數作用域
在Python中,變數的作用域定義為使用者可以訪問該變數的特定區域或範圍。變數的作用域取決於其定義的位置和方式。在Python中,變數可以具有全域性作用域或區域性作用域。
Python變數的作用域型別
根據作用域,Python變數分為三類:
區域性變數
全域性變數
非區域性變數
區域性變數
區域性變數在特定的函式或程式碼塊內定義。只有定義它的函式或程式碼塊才能訪問它,它的作用域有限。換句話說,區域性變數的作用域僅限於其定義的函式,嘗試在其外部訪問它將導致錯誤。始終記住,多個區域性變數可以具有相同的名稱。
示例
以下示例顯示了局部變數的作用域。
def myfunction(): a = 10 b = 20 print("variable a:", a) print("variable b:", b) return a+b print (myfunction())
在上面的程式碼中,我們透過其函式訪問了區域性變數。因此,程式碼將產生以下輸出:
variable a: 10 variable b: 20 30
全域性變數
全域性變數可以從程式的任何部分訪問,它在任何函式或程式碼塊之外定義。它不特定於任何塊或函式。
示例
以下示例顯示了全域性變數的作用域。我們可以在函式作用域內和函式作用域外訪問它們。
#global variables name = 'TutorialsPoint' marks = 50 def myfunction(): # accessing inside the function print("name:", name) print("marks:", marks) # function call myfunction()
上面的程式碼將產生以下輸出:
name: TutorialsPoint marks: 50
非區域性變數
在Python中,那些既不在區域性作用域也不在全域性作用域中定義的變數稱為非區域性變數。它們用於巢狀函式。
示例
以下示例演示了非區域性變數的工作方式。
def yourfunction(): a = 5 b = 6 # nested function def myfunction(): # nonlocal function nonlocal a nonlocal b a = 10 b = 20 print("variable a:", a) print("variable b:", b) return a+b print (myfunction()) yourfunction()
上面的程式碼將產生以下輸出:
variable a: 10 variable b: 20 30
Python變數的名稱空間和作用域
名稱空間是識別符號(例如變數名、函式名、類名等)的集合。在Python中,名稱空間用於管理變數的作用域並防止命名衝突。
Python提供以下型別的名稱空間:
內建名稱空間包含內建函式和內建異常。它們在載入Python直譯器時立即載入到記憶體中,並在直譯器執行期間一直存在。
全域性名稱空間包含在主程式中定義的任何名稱。這些名稱在程式執行期間一直存在於記憶體中。
區域性名稱空間包含在函式內部定義的名稱。它們在函式執行期間可用。
這些名稱空間是巢狀的。下圖顯示了名稱空間之間的關係。

某個變數的生命週期僅限於其定義所在的名稱空間。因此,無法從任何外部名稱空間訪問內部名稱空間中的變數。
Python globals() 函式
Python 的標準庫包含一個內建函式 globals()。它返回當前在全域性名稱空間中可用的符號的字典。
直接從 Python 提示符執行 globals() 函式。
>>> globals() {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>}
可以看出,包含所有內建函式和內建異常定義的內建模組已載入。
示例
儲存以下包含少量變數和一個在其內部包含更多變數的函式的程式碼。
name = 'TutorialsPoint' marks = 50 result = True def myfunction(): a = 10 b = 20 return a+b print (globals())
從這個指令碼內部呼叫 globals() 返回以下字典物件:
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x00000263E7255250>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'C:\\Users\\user\\examples\\main.py', '__cached__': None, 'name': 'TutorialsPoint', 'marks': 50, 'result': True, 'myfunction': <function myfunction at 0x00000263E72004A0>}
全域性名稱空間現在包含程式中的變數及其值以及其中的函式物件(而不是函式中的變數)。
Python locals() 函式
Python 的標準庫包含一個內建函式 locals()。它返回函式區域性名稱空間中當前可用符號的字典。
示例
修改上述指令碼,以從函式內部列印全域性和區域性名稱空間的字典。
name = 'TutorialsPoint' marks = 50 result = True def myfunction(): a = 10 b = 20 c = a+b print ("globals():", globals()) print ("locals():", locals()) return c myfunction()
輸出顯示 locals() 返回一個字典,其中包含函式中當前可用的變數及其值。
globals(): {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x00000169AE265250>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'C:\\Users\\mlath\\examples\\main.py', '__cached__': None, 'name': 'TutorialsPoint', 'marks': 50, 'result': True, 'myfunction': <function myfunction at 0x00000169AE2104A0>} locals(): {'a': 10, 'b': 20, 'c': 30}
由於 globals() 和 locals() 函式都返回字典,因此可以使用字典的 get() 方法或索引運算子訪問相應名稱空間中變數的值。
print (globals()['name']) # displays TutorialsPoint print (locals().get('a')) # displays 10
Python 中的名稱空間衝突
如果全域性和區域性作用域中都存在同名變數,Python 直譯器會優先考慮區域性名稱空間中的變數。
示例
在下面的示例中,我們定義了一個區域性變數和一個全域性變數。
marks = 50 # this is a global variable def myfunction(): marks = 70 # this is a local variable print (marks) myfunction() print (marks) # prints global value
它將產生以下輸出:
70 50
示例
如果嘗試從函式內部操作全域性變數的值,Python 會引發UnboundLocalError,如下面的示例所示:
# this is a global variable marks = 50 def myfunction(): marks = marks + 20 print (marks) myfunction() # prints global value print (marks)
它將產生以下錯誤訊息:
marks = marks + 20 ^^^^^ UnboundLocalError: cannot access local variable 'marks' where it is not associated with a value
示例
要修改全域性變數,可以使用字典語法更新它,或者在修改之前使用global關鍵字引用它。
var1 = 50 # this is a global variable var2 = 60 # this is a global variable def myfunction(): "Change values of global variables" globals()['var1'] = globals()['var1']+10 global var2 var2 = var2 + 20 myfunction() print ("var1:",var1, "var2:",var2) #shows global variables with changed values
執行程式碼後,它將產生以下輸出:
var1: 60 var2: 80
示例
最後,如果嘗試在全域性作用域中訪問區域性變數,Python 會引發 NameError,因為區域性作用域中的變數無法在其外部訪問。
var1 = 50 # this is a global variable var2 = 60 # this is a global variable def myfunction(x, y): total = x+y print ("Total is a local variable: ", total) myfunction(var1, var2) print (total) # This gives NameError
它將產生以下錯誤訊息:
Total is a local variable: 110 Traceback (most recent call last): File "C:\Users\user\examples\main.py", line 9, in <module> print (total) # This gives NameError ^^^^^ NameError: name 'total' is not defined