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

首頁 > 編程 > Python > 正文

Python基礎(chǔ)教程之內(nèi)置函數(shù)locals()和globals()用法分析

2020-02-22 23:29:44
字體:
供稿:網(wǎng)友

本文實(shí)例講述了Python基礎(chǔ)教程之內(nèi)置函數(shù)locals()和globals()用法。分享給大家供大家參考,具體如下:

1. 這兩個函數(shù)主要提供,基于字典的訪問局部變量和全局變量的方式。

python 使用叫做名字空間的東西來記錄變量的軌跡。名字空間是一個字典 ,它的鍵就是字符串形式的變量名字,它的值就是變量的實(shí)際值。

名字空間可以像 Python 的 dictionary 一樣進(jìn)行訪問。

在一個 Python 程序中的任何一個地方,都存在幾個可用的名字空間。

每個函數(shù)都有著自已的名字空間,叫做局部名字空間,它記錄了函數(shù)的變量,包括函數(shù)的參數(shù)和局部定義的變量。

每個模塊擁有它自已的名字空間,叫做全局名字空間,它記錄了模塊的變量,包括函數(shù)、類、其它導(dǎo)入的模塊、模塊級的變量和常量。

還有就是內(nèi)置名字空間, 任何模塊均可訪問它,它存放著內(nèi)置的函數(shù)和異常。

2. 當(dāng)一行代碼要使用變量 x 的值時,Python 會到所有可用的名字空間去查找變量,按照如下順序:

局部名字空間 - 特指當(dāng)前函數(shù)或類的方法。如果函數(shù)定義了一個局部變量 x, 或一個參數(shù) x,Python 將使用它,然后停止搜索。

全局名字空間 - 特指當(dāng)前的模塊。如果模塊定義了一個名為 x 的變量,函數(shù)或類,Python 將使用它然后停止搜索。

內(nèi)置名字空間 - 對每個模塊都是全局的。作為最后的嘗試,Python 將假設(shè) x 是內(nèi)置函數(shù)或變量。

如果 Python 在這些名字空間找不到 x,它將放棄查找并引發(fā)一個 NameError 異常,同時傳遞 There is no variable named 'x' 這樣一條信息.

3. 名字空間在運(yùn)行時直接可以訪問。局部名字空間可以通過內(nèi)置的 locals 函數(shù)來訪問。全局 (模塊級別) 名字空間可以通過內(nèi)置的 globals 函數(shù)來訪問。

locals 對局部 (函數(shù)) 名字空間做了些什么,globals 就對全局 (模塊) 名字空間做了什么。

然而 globals 更令人興奮,因?yàn)橐粋€模塊的名字空間包含了模塊級的變量和常量,它還包括了所有在模塊中定義的函數(shù)和類,以及任何被導(dǎo)入到模塊中的東西。

4. 回想一下 from module import 和 import module 之間的不同?

使用 import module,模塊自身被導(dǎo)入,但是它保持著自已的名字空間,這就是為什么您需要使用模塊名來訪問它的函數(shù)或?qū)傩? module.function 的原因。

但是使用 from module import,實(shí)際上是從另一個模塊中將指定的函數(shù)和屬性導(dǎo)入到您自己的名字空間,這就是為什么您可以直接訪問它們卻不需要引用它們所來源的模塊的原因。

使用 globals 函數(shù),您會真切地看到這一切的發(fā)生。

5. locals()實(shí)例:

def foo(arg, a):  x = 100  y = 'hello python!'  for i in range(10):    j = 1    k = i  print locals()foo(1,2)            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 冷水江市| 小金县| 黑河市| 房产| 汾阳市| 银川市| 隆尧县| 尤溪县| 工布江达县| 麦盖提县| 阿鲁科尔沁旗| 榆树市| 广饶县| 兰西县| 永仁县| 汝阳县| 新和县| 东莞市| 集安市| 蓬溪县| 衡阳县| 类乌齐县| 建宁县| 洪泽县| 义乌市| 东平县| 苍山县| 准格尔旗| 修水县| 宜城市| 南昌市| 大埔区| 宜黄县| 西吉县| 林甸县| 新丰县| 枝江市| 潼南县| 凤凰县| 姜堰市| 新巴尔虎左旗|