溫馨提示×

Python里的function有何作用域規(guī)則

小樊
82
2024-09-29 14:47:05
欄目: 編程語言

在Python中,函數(shù)的作用域規(guī)則遵循LEGB規(guī)則,這是Python語言中的一個(gè)重要概念。LEGB規(guī)則指的是局部作用域(Local)、封閉作用域(Enclosing)、全局作用域(Global)和內(nèi)置作用域(Built-in)這四種作用域的優(yōu)先級順序。

  1. 局部作用域(Local):這是函數(shù)內(nèi)部定義的作用域,函數(shù)內(nèi)部的所有變量都屬于局部作用域。當(dāng)在函數(shù)內(nèi)部訪問一個(gè)變量時(shí),Python首先會在局部作用域中查找該變量。如果找不到,則會繼續(xù)查找封閉作用域、全局作用域和內(nèi)置作用域。
  2. 封閉作用域(Enclosing):這是指包含當(dāng)前函數(shù)的外部函數(shù)的作用域。如果當(dāng)前函數(shù)內(nèi)部定義了一個(gè)變量,但是在函數(shù)外部也有一個(gè)同名的變量,那么在函數(shù)內(nèi)部訪問這個(gè)變量時(shí),Python會優(yōu)先查找封閉作用域中的變量。需要注意的是,封閉作用域僅指直接包含當(dāng)前函數(shù)的外部函數(shù)的作用域,而不包括更外層的外部函數(shù)。
  3. 全局作用域(Global):這是Python程序的全局作用域,包含了所有模塊級別的變量和函數(shù)。當(dāng)在函數(shù)內(nèi)部訪問一個(gè)全局變量時(shí),Python會在全局作用域中查找該變量。如果找不到,則會繼續(xù)查找局部作用域、封閉作用域和內(nèi)置作用域。
  4. 內(nèi)置作用域(Built-in):這是Python語言內(nèi)置的作用域,包含了所有內(nèi)置函數(shù)和異常。當(dāng)在函數(shù)內(nèi)部訪問一個(gè)內(nèi)置函數(shù)或異常時(shí),Python會在內(nèi)置作用域中查找該函數(shù)或異常。如果找不到,則會繼續(xù)查找局部作用域、封閉作用域和全局作用域。

需要注意的是,如果在函數(shù)內(nèi)部想要修改全局變量,必須使用global關(guān)鍵字聲明該變量為全局變量。否則,Python會將該變量視為局部變量,并在函數(shù)內(nèi)部對其進(jìn)行賦值操作時(shí)拋出UnboundLocalError異常。

另外,Python還支持嵌套函數(shù)的作用域規(guī)則。嵌套函數(shù)可以訪問其外部函數(shù)的變量,包括嵌套函數(shù)內(nèi)部定義的變量。但是需要注意的是,嵌套函數(shù)只能在其外部函數(shù)的作用域內(nèi)訪問這些變量,而不能訪問更外層的外部函數(shù)或其他模塊的變量。

0