在電腦程序設(shè)計中页衙,作用域(scope拆吆,或譯作有效范圍)是名字(name)與實體(entity)的綁定(binding)保持有效的那部分計算機程序姚糊。不同的編程語言可能有不同的作用域和名字解析剑按。而同一語言內(nèi)也可能存在多種作用域淌铐,隨實體的類型變化而不同。作用域類別影響變量的綁定方式菠发,根據(jù)語言使用靜態(tài)作用域還是動態(tài)作用域變量的取值可能會有不同的結(jié)果王滤。(來自維基百科)
由于Python
動態(tài)語言所具備的特性,它的所有變量都是在賦值的時候生成的(沒有單獨的初始化過程)滓鸠。而對于任意變量名的訪問雁乡、操作都是在特定變量命名空間(namespace)中進行的。變量名所在的命名空間直接決定了它可以被訪問到的范圍糜俗,即作用域踱稍。Python
中的作用域主要分為以下幾種:
- 局部作用域 函數(shù)每次調(diào)用都會創(chuàng)建一個局部作用域。所以悠抹,函數(shù)內(nèi)部的變量名可以與外部變量重名珠月,并且在函數(shù)內(nèi)部覆蓋外部的同名變量(除非用global關(guān)鍵字顯示聲明為外部變量)。
- 全局作用域 定義在
Python
文件層級的變量在全局作用域中楔敌。這里的全局指的是在整個Python
文件中桥温,而不是包層級。該文件外梁丘,需要通過import
引入,方可使用旺韭。 - 嵌套作用域 在出現(xiàn)多層嵌套的情況下會出現(xiàn)氛谜。
- 內(nèi)置作用域 通過
__builtin__
模塊實現(xiàn)。
而對于Python
內(nèi)部而言区端,變量的查找順序是:
- 在函數(shù)內(nèi)部查找值漫,即
locals()
- 在文件內(nèi)查找,即
globals()
- 在外層查找织盼,即在
__builtin__
中查找