国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

淺談python函數(shù)之作用域(python3.5)

2020-02-16 10:30:36
字體:
供稿:網(wǎng)友

1 基本概念

1.1 命名空間 (namespace)

命名空間是變量名到對象的映射(name -> obj)。目前大多數(shù)的命名空間以類似于python字典的形式實現(xiàn),實現(xiàn)形式在未來可能發(fā)生變化。命名空間舉例:內(nèi)置變量(內(nèi)置函數(shù)abs, 內(nèi)置的異常等),模塊中的全局變量,函數(shù)調(diào)用時的局部變量。在某種意義上講,對象的屬性也形成一個命名空間。重要的是,不同的命名空間中的變量沒有任何關(guān)聯(lián),兩個不同的命名空間中可以包含相同的變量名。

命名空間有不同的創(chuàng)建時間和生命周期:

•內(nèi)置變量命名空間在python解釋器啟動時創(chuàng)建,并且在解釋器運行期間永遠不會被刪除;

•一個模塊的命名空間在模塊被導(dǎo)入時創(chuàng)建,并且到解釋器退出會一直存在;

•函數(shù)的本地(局部)命名空間在函數(shù)調(diào)用時創(chuàng)建,函數(shù)退出時刪除;

•解釋器頂層執(zhí)行的語句都是 __main__ 模塊的組成部分,它們有自己的命名空間。

注:內(nèi)置變量實際上同樣是以模塊的形式存在,模塊名為 builtins 。

1.2 作用域 (scope)

作用域是Python程序中可以直接訪問一個命名空間內(nèi)變量的文本區(qū)域,可直接訪問即命名空間內(nèi)的變量在該文本區(qū)域內(nèi)可見、可引用。

•本地(局部)作用域:函數(shù)或者類的內(nèi)部

•全局作用域:整個程序的運行環(huán)境。

全局作用域中無法直接訪問本地作用域中定義的變量:

def func1(): name = 1print(func1) # <function func1 at 0x101a03d08>print(name)# Traceback (most recent call last):# File "<stdin>", line 1, in <module># NameError: name 'name' is not defined

本地作用域中的變量定義:

•在python中,變量賦值即定義。在局部作用域內(nèi)被賦值的變量,除非由 global 或者 nonlocal 聲明,否則全部為局部變量,函數(shù)調(diào)用時存在于函數(shù)命名空間。

•global var : 聲明變量 var 為全局變量,它所有的引用和賦值都在模塊的命名空間進行。

•nonlocal var : 將外層函數(shù)命名空間中的變量 var 綁定到本地作用域,使其在本地作用域可重新賦值。如果變量沒有被聲明為 nonlocal,這些變量在本地作用域僅可讀,嘗試給變量賦值則會在本地命名空間創(chuàng)建一個同名變量。

nonlocal聲明的變量在上層函數(shù)中必須存在,否則報錯:

test = 'global variable'def scope_test(): def inner():  nonlocal test  print(test)scope_test() # SyntaxError: no binding for nonlocal 'test' found

2 示例

2.1 本地作用域中變量的搜索遵守LEGB規(guī)則

1.L-Local(function):函數(shù)或類的命名空間,其中的變量稱為本地變量

2.E-Enclosing function locals:外層函數(shù)的命名空間(例如closure),包含被聲明為non-local的變量

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 长乐市| 阳城县| 宁安市| 丹棱县| 伊川县| 庆阳市| 星座| 纳雍县| 平度市| 色达县| 灌云县| 习水县| 兴安县| 隆尧县| 临颍县| 旺苍县| 华阴市| 汽车| 沁源县| 瓦房店市| 黄陵县| 内江市| 太康县| 屏山县| 呼玛县| 青冈县| 泸州市| 怀化市| 万年县| 肇东市| 安龙县| 富川| 许昌市| 法库县| 泰安市| 泸州市| 南安市| 洮南市| 浙江省| 扶风县| 瑞金市|