Python 中的作用域
變量的作用域是指變量的作用范圍,是程序可以訪問該變量的正文區(qū)域。例如:
g = 123
def function():
print(g)
print(g)
- 程序總共有 6 行
- 在第 1 行,定義了變量 g
- 在第 4 行,在函數(shù) function 內(nèi)部訪問變量 g
- 在第 6 行,在全局范圍訪問變量 g
因為可以在程序的任意位置(從第 1 行到第 6行)訪問到該變量,變量 g 的作用域就是從第 1 行到第 6行的正文區(qū)域。
1. 四種作用域
1.1 概述
在 Python 中,存在 4 種類型的作用域:
- Builtin 作用域,能夠訪問內(nèi)置函數(shù)和內(nèi)置變量的正文區(qū)域
- Global 作用域,能夠訪問全局變量的正文區(qū)域
- Local 作用域,能夠訪問函數(shù)參數(shù)和局部變量的正文區(qū)域
- Enclosing 作用域,如果函數(shù)是嵌套定義的,能夠訪問外部函數(shù)的參數(shù)和局部變量的正文區(qū)域
1.2 Builtin 作用域
Builtin 作用域是能夠訪問內(nèi)置函數(shù)和內(nèi)置變量的正文區(qū)域。示例說明 Builtin 作用域:
def function():
print(max(1, 2))
print(max(3, 4))
- max 是內(nèi)置函數(shù)
- 它的作用域類型是 Builtin 作用域
- 在第 2 行,在函數(shù) function 內(nèi)訪問它
- 在第 4 行,在全局范圍訪問它
- max 的作用域是從第 1 行到第 4 行的文本區(qū)域
1.3 Global 作用域
Global 作用域是能夠訪問全局變量的正文區(qū)域。示例說明 Global 作用域:
global_var = 123
def function():
print(global_var)
print(global_var)
- global_var 是全局變量
- 它的作用域類型是 Global 作用域
- 在第 1 行,在全局范圍訪問它
- 在第 4 行,在函數(shù) function 內(nèi)訪問它
- 在第 6 行,在全局范圍訪問它
- global_var 的作用域是從第 1 行到第 6 行的文本區(qū)域
1.4 Local 作用域
Local 作用域是能夠訪問函數(shù)參數(shù)和局部變量的正文區(qū)域。示例說明 Local 作用域:
def function():
local_var = 123
print(local_var)
print(local_var)
- local_var 是函數(shù) function 的局部變量
- 它的作用域類型是 Local 作用域
- 在第 2 行,在函數(shù) function 內(nèi)訪問它
- 在第 3 行,在函數(shù) function 內(nèi)訪問它
- 在第 5 行,在函數(shù) function 外訪問變量
- 只能在函數(shù)內(nèi)部訪問局部變量
- 運行時會產(chǎn)生異常 NameError
- local_var 的作用域是從第 2 行到第 3 行的文本區(qū)域
1.5 Enclosing 作用域
假設函數(shù)是嵌套定義的,Enclosing 作用域是能夠訪問外部函數(shù)的參數(shù)和局部變量的正文區(qū)域。示例說明 Local 作用域:
def outter():
outter_var = 123
def inner():
inner_var = 456
print(outter_var)
outter()
- 函數(shù)嵌套定義
- 函數(shù) outter 是外部函數(shù)
- 函數(shù) inner 是內(nèi)部函數(shù)
- outter_var 是外部函數(shù) outter 的局部變量
- 它的作用域類型是 Encloing 作用域
- 在第 2 行,在外部函數(shù) outter 內(nèi)訪問它
- 在第 5 行,在外部函數(shù) inner 內(nèi)訪問它
- outter_var 的作用域是從第 2 行到第 5 行的文本區(qū)域