最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python 中的命名空間,你真的了解嗎?

 更新時間:2020年08月19日 10:45:19   作者:Rocky0429  
這篇文章主要介紹了python 中命名空間的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下

寫在之前

命名空間,又名 namesapce,是在很多的編程語言中都會出現(xiàn)的術(shù)語,估計很多人都知道這個詞,但是讓你真的來說這是個什么,估計就歇菜了,所以我覺得 “命名空間” 有必要了解一下。

全局變量 & 局部變量

全局變量和局部變量是我們理解命名空間的開始,我們先來看一段代碼:

x = 2
def func():
  x = 3
  print('func x ---> ',x)

func()
print('out of func x ---> ',x)

這段代碼輸出的結(jié)果如下:

func x ---> 3
out of func x ---> 2

從上述的結(jié)果中可以看出,運行 func(),輸出的是 func() 里面的變量 x 所引用的對象 3,之后執(zhí)行的是代碼中的最后一行。這里要區(qū)分清楚,前一個 x 輸出的是函數(shù)內(nèi)部的變量 x,后一個 x 輸出的是函數(shù)外的變量 x,兩個變量互相不影響,在各自的作用域中起作用。

那個只在函數(shù)內(nèi)起作用的變量就叫 “局部變量”,有了 “局部” 就有相應(yīng)的 “全部”,但是后者聽起來有歧義,所以就叫了 “全局”。

x = 2
def func():
  global x = 3 #注意此處
  print('func x ---> ',x)

func()
print('out of func x ---> ',x)

這段代碼中比上段代碼多加了一個 global x,這句話的意思是在聲明 x 是全局變量,通俗點說就是這個 x 和 函數(shù)外的 x 是同一個了,所以結(jié)果就成了下面這樣:

func x ---> 3
out of func x ---> 3

這樣乍一看好像全局變量好強,可以管著函數(shù)內(nèi)外,但是我們還是要注意,全局變量還是謹(jǐn)慎使用的好,因為畢竟內(nèi)外有別,不要帶來混亂。

作用域

作用域,用比較直白的方式來說,就是程序中變量與對象存在關(guān)聯(lián)的那段程序,比如我在上面說的, x = 2 和 x = 3 是在兩個不同的作用域中。

通常的,作用域是被分為靜態(tài)作用域和動態(tài)作用域,雖然我們說 Python 是動態(tài)語言,但是它的作用域?qū)儆陟o態(tài)作用域,即 Python 中的變量的作用域是由該變量所在程序中的位置所決定的。

在 Python 中作用域被劃分成四個層級,分別是:local(局部作用域),enclosing(嵌套作用域),global(全局作用域)和 built - in(內(nèi)建作用域)。對于一個變量,Python 也是按照之前四個層級依次在不用的作用域中查找,我們在上一段代碼中,對于變量 x,首先搜索的是函數(shù)體內(nèi)的局部作用域,然后是函數(shù)體外的全局作用域,至于這段話具體怎么來理解,請看下面的例子:

def out_func():
  x = 2
  def in_func():
    x = 3
    print('in_func x ---> ',x)
  in_func()
  print('out_func x ---> ',x)

x = 4
out_func()
print('x == ',x)

仔細(xì)觀察一下上面的代碼和運行的結(jié)果,你就會發(fā)現(xiàn)變量在不同的范圍內(nèi)進行搜索的規(guī)律,是不是感覺這些都是以前被你忽略的呢?

命名空間

《維基百科》中說 “命名空間是對作用域的一種特殊的抽象”,在這里我用一個比方來具體說明一下:

比如張三在公司 A,他的工號是 111,李四在公司 B,他的工號也是 111,因為兩個人在不同的公司,他們倆的工號可以相同但是不會引起混亂,這里的公司就表示一個獨立的命名空間,如果兩個人在一個公司的話,他們的工號就不能相同,否則光看工號也不知道到底是誰。

其實上面舉的這個例子的特點就是我們使用命名空間的理由,在大型的計算機程序中,往往會出現(xiàn)成百上千的標(biāo)識符,命名空間提供隱藏區(qū)域標(biāo)識符的機制。通過將邏輯上相關(guān)的標(biāo)識符構(gòu)成響應(yīng)的命名空間,可以使整個系統(tǒng)更加的模塊化。

我在開頭引用的《維基百科》的那句話說 “命名空間是對作用域的一種特殊的抽象”,它其實包含了處于該作用域內(nèi)的標(biāo)識符,且它本身也用一個標(biāo)識符來表示。在 Python 中,命名空間本身的標(biāo)識符也屬于更外層的一個命名空間,所以命名空間也是可以嵌套的,它們共同生活在 “全局命名空間” 下。

簡言之,不同的命名空間可以同時存在,但是彼此獨立,互不干擾。當(dāng)然了,命名空間因為其對象的不同也有所區(qū)別,可以分為以下幾種:

1.本地命名空間:模塊中有函數(shù)或者類的時候,每個函數(shù)或者類所定義的命名空間即是本地命名空間,當(dāng)函數(shù)返回結(jié)果或者拋出異常的時候,本地命名空間也就結(jié)束了。

2.全局命名空間:每個模塊創(chuàng)建了自己所擁有的全局命名空間,不同模塊的全局命名空間彼此獨立,不同模塊中相同名稱的命名空間也會因為模塊的不同而不相互干擾。

3.內(nèi)置命名空間:當(dāng) Python 運行起來的時候,它們就存在了,內(nèi)置函數(shù)的命名空間都屬于內(nèi)置命名空間,所以我們可以在任何程序中直接運行它們。

程序查詢命名空間的時候也有一套順序,依次按照本地命名空間 ,全局命名空間,內(nèi)置命名空間。

def fun(like):
  name = 'rocky'
  print(locals())

fun('python')

訪問本地命名空間使用 locals 完成,我們來看一下結(jié)果:

{'name': 'rocky', 'like': 'python'}

從上面的結(jié)果中可以看出,命名空間中的數(shù)據(jù)存儲的結(jié)構(gòu)和字典是一樣的。可能你已經(jīng)猜到了,當(dāng)我們要訪問全局命名空間的時候,可以使用 globals。

關(guān)于命名空間還有一個生命周期的問題,就是一個命名空間什么時候出現(xiàn),什么時候消失,這個很好理解,就是哪部分被讀入內(nèi)存,哪部分的命名空間就存在了,比如我們在上面說的,Python 啟動,內(nèi)置命名空間就建立。

寫在之后

至此,我的零基礎(chǔ)學(xué)習(xí) Python 計劃里關(guān)于函數(shù)的部分就結(jié)束了,這一部分寫的時間超出了我原本的計劃,但是在寫的過程中覺得有些知識點還是說說的好,從下周開始,就要開始 “類” 這一部分的學(xué)習(xí)啦,希望我們還可以繼續(xù)這么走下去,我堅持寫,你也堅持學(xué)。

還有堅持。。點個贊。。

以上就是python 中的命名空間,你真的了解嗎?的詳細(xì)內(nèi)容,更多關(guān)于python 命名空間的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 基于wxpython開發(fā)的簡單gui計算器實例

    基于wxpython開發(fā)的簡單gui計算器實例

    這篇文章主要介紹了基于wxpython開發(fā)的簡單gui計算器,實例分析了基于wxpython實現(xiàn)簡單桌面應(yīng)用程序的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • python-docx 頁面設(shè)置詳解

    python-docx 頁面設(shè)置詳解

    今天小編就為大家分享一篇python docx 中頁面的設(shè)置,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-10-10
  • python實現(xiàn)三次密碼驗證的示例

    python實現(xiàn)三次密碼驗證的示例

    這篇文章主要介紹了python實現(xiàn)三次密碼驗證的示例,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-04-04
  • Flask搭建一個API服務(wù)器的步驟

    Flask搭建一個API服務(wù)器的步驟

    Flask真是一個強大且簡介的web框架,能夠快速搭建web服務(wù)器,本文主要介紹了Flask搭建一個API服務(wù)器的步驟,分享給大家,感興趣的可以了解一下
    2021-05-05
  • Python辦公自動化之CSV文件的運用和管理

    Python辦公自動化之CSV文件的運用和管理

    Python辦公?動化是利?Python編程語?來創(chuàng)建腳本和程序,以簡化、加速和?動化?常辦公任務(wù)和?作流程的過程,本文主要來介紹一下如何利用Python進行CSV文件的運用和管理,感興趣的可以了解下
    2023-12-12
  • python中的%?是什么意思,起到什么作用呢

    python中的%?是什么意思,起到什么作用呢

    %Y會被無世紀(jì)的年份所替代,%m會被01到12之間的一個十進制月份數(shù)替代,其他依次類推,%在python的格式化輸出,有轉(zhuǎn)換字符的作用,本文給大家講解python中的%?是什么意思,起到什么作用,感興趣的朋友一起看看吧
    2022-12-12
  • Python劃分?jǐn)?shù)組為連續(xù)數(shù)字集合的練習(xí)

    Python劃分?jǐn)?shù)組為連續(xù)數(shù)字集合的練習(xí)

    這篇文章主要給大家分享的是Python劃分?jǐn)?shù)組為連續(xù)數(shù)字集合的練習(xí),下面文章首先對問題進行詳細(xì)描述,在根據(jù)問題提出解決方案,內(nèi)容詳細(xì),需要的朋友可以參考一下,希望對你有所幫助
    2021-11-11
  • NumPy統(tǒng)計函數(shù)的實現(xiàn)方法

    NumPy統(tǒng)計函數(shù)的實現(xiàn)方法

    這篇文章主要介紹了NumPy統(tǒng)計函數(shù)的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • Python類的基本寫法與注釋風(fēng)格介紹

    Python類的基本寫法與注釋風(fēng)格介紹

    這篇文章主要介紹了Python類的基本寫法與注釋風(fēng)格,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Python腳本實現(xiàn)自動將數(shù)據(jù)庫備份到 Dropbox

    Python腳本實現(xiàn)自動將數(shù)據(jù)庫備份到 Dropbox

    本文給大家分享的是作者使用python腳本實現(xiàn)自動備份mysql數(shù)據(jù)庫到的dropbox網(wǎng)盤的代碼,非常的簡單實用,有需要的小伙伴可以參考下
    2017-02-02

最新評論

句容市| 云和县| 福海县| 乐都县| 聊城市| 从化市| 县级市| 新乡市| 渝中区| 海丰县| 南岸区| 洛阳市| 东乡县| 红安县| 乳山市| 余姚市| 湘西| 搜索| 双桥区| 鹤峰县| 保德县| 华亭县| 平果县| 政和县| 迁西县| 大姚县| 巧家县| 安达市| 延长县| 黄陵县| 漯河市| 沙河市| 兴宁市| 清徐县| 封丘县| 呼图壁县| 合阳县| 石城县| 五大连池市| 枣庄市| 肇州县|