日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python中的命名空间指什么_13.Python中的命名空间是什么

發(fā)布時(shí)間:2023/12/10 python 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python中的命名空间指什么_13.Python中的命名空间是什么 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Python中的命名空間是什么?

In Python,every name introduced has a place where it lives and can be hooked for.

This is known as namespace. It is like a box where a variable name is mapped to the object placed.

Whenever the variable is searched out, this box will be searched, to get corresponding object.

namespace命名空間

Namespace(只)是?從名字到對(duì)象的一個(gè)映射(a mapping from name to objects)?。大部分namespace都是按Python中的字典來(lái)實(shí)現(xiàn)的。

有一些常見的namespace:built-in中的集合(?abs()?函數(shù)等)、一個(gè)模塊中的全局變量等。

從某種意義上來(lái)說(shuō),一個(gè)對(duì)象(object)的所有屬性(attribute)也構(gòu)成了一個(gè)namespace。在程序執(zhí)行期間,可能(其實(shí)是肯定)會(huì)有多個(gè)命名空間同時(shí)存在。不同namespace的創(chuàng)建/銷毀時(shí)間也不同。

此外,兩個(gè)不同namespace中的兩個(gè)相同名字的變量之間沒有任何聯(lián)系。

scope作用域

Scope是Python程序的一塊文本區(qū)域(textual region)。

在該文本區(qū)域中,對(duì)namespace是可以直接訪問(wèn),而不需要通過(guò)屬性來(lái)訪問(wèn)。

Scope是定義程序該如何搜索確切地“名字-對(duì)象”的名空間的層級(jí)關(guān)系。

(The “scope” in Python defines the “hirerchy level” in which we search namespaces for

certain “name-to-object” mappings.)

Tip

直接訪問(wèn):對(duì)一個(gè)變量名的引用會(huì)在所有namespace中查找該變量,而不是通過(guò)屬性訪問(wèn)。

屬性訪問(wèn):所有名字后加?.?的都認(rèn)為是屬性訪問(wèn)。

如?module_name.func_name?,需要指定?func_name?的名空間,屬于屬性訪問(wèn)。

而?abs(-1)?,?abs?屬于直接訪問(wèn)。

那什么是命名空間/作用域呢?

這兩個(gè)概念,是用來(lái)描述一個(gè)變量的屬性的,它們的意思,就是字面意思:“這個(gè)變量起名字的地方/這個(gè)變量起作用的域”.

LEGB-rule

在一個(gè)Python程序運(yùn)行中,至少有4個(gè)scopes是存在的。

直接訪問(wèn)一個(gè)變量可能在這四個(gè)namespace中逐一搜索。

Local(innermost)包含局部變量。

比如一個(gè)函數(shù)/方法內(nèi)部。

Enclosing包含了非局部(non-local)也非全局(non-global)的變量。

比如兩個(gè)嵌套函數(shù),內(nèi)層函數(shù)可能搜索外層函數(shù)的namespace,但該namespace對(duì)內(nèi)層函數(shù)而言既非局部也非全局。

Global(next-to-last)當(dāng)前腳本的最外層。

比如當(dāng)前模塊的全局變量。

Built-in(outtermost)Python?__builtin__?模塊。

包含了內(nèi)建的變量/關(guān)鍵字等。

那么,這么多的作用域,Python是按什么順序搜索對(duì)應(yīng)作用域的呢?

著名的”LEGB-rule”,即scope的搜索順序:

Important

Local -> Enclosing -> Global -> Built-in

怎么個(gè)意思呢?

當(dāng)有一個(gè)變量在?local?域中找不到時(shí),Python會(huì)找上一層的作用域,即?enclosing?域(該域不一定存在)。enclosing?域還找不到的時(shí)候,再往上一層,搜索模塊內(nèi)的?global?域。最后,會(huì)在?built-in?域中搜索。對(duì)于最終沒有搜索到時(shí),Python會(huì)拋出一個(gè)?NameError?異常。

作用域可以嵌套。比如模塊導(dǎo)入時(shí)。

這也是為什么不推薦使用?from?a_module?import?*?的原因,導(dǎo)入的變量可能被當(dāng)前模塊覆蓋。

參考:http://www.cnblogs.com/sunchao1984/p/5377680.html

http://python.jobbole.com/81367/

總結(jié)

以上是生活随笔為你收集整理的python中的命名空间指什么_13.Python中的命名空间是什么的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。