python27nonlocal
① python語言中命名空間的使用
如果一個命名聲明為全局的,那麼對它的所有引用和賦值會直接搜索包含這個模塊全局命名的作用域。如果要重新綁定最里層作用域之外的變數,可以使用 nonlocal 語句;如果不聲明為 nonlocal,這些變數將是只讀的(對這樣的變數賦值會在最裡面的作用域創建一個新的局部變數,外部具有相同命名的那個變數不會改變)。
通常,局部作用域引用當前函數的命名。在函數之外,局部作用域與全局使用域引用同一命名空間:模塊命名空間。類定義也是局部作用域中的另一個命名空間。
重要的是作用域決定於源程序的意義:一個定義於某模塊中的函數的全局作用域是該模塊的命名空間,而不是該函數的別名被定義或調用的位置,了解這一點非常重要。另一方面,命名的實際搜索過程是動態的,在運行時確定的——然而,Python 語言也在不斷發展,以後有可能會成為靜態的「編譯」時確定,所以不要依賴動態解析!(事實上,局部變數已經是靜態確定了。)
Python 的一個特別之處在於:如果沒有使用 global 語法,其賦值操作總是在最里層的作用域。賦值不會復制數據,只是將命名綁定到對象。刪除也是如此:del x 只是從局部作用域的命名空間中刪除命名 x 。事實上,所有引入新命名的操作都作用於局部作用域。特別是 import 語句和函數定義將模塊名或函數綁定於局部作用域(可以使用 global 語句將變數引入到全局作用域)。
global 語句用以指明某個特定的變數為全局作用域,並重新綁定它。nonlocal 語句用以指明某個特定的變數為封閉作用域,並重新綁定它。
② python語言保留字有哪些
保留字是Python語言中一些已經被賦予特定意義的單詞,這就要求開發者在開發程序時,不能用這些保留字作為標識符給變數、函數、類、模板以及其他對象命名。
Python包含的保留字可以執行如下命令進行查看:
>>> import keyword
>>> keyword.kwlist
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
python保留字
需要注意的是,由於Python是嚴格區分大小寫的,保留字也不例外。所以,我們可以說if是保留字,但IF就不是保留字。
在實際開發中,如果使用Python中的保留字作為標識符,則解釋器會提示「invalid syntax」的錯誤信息