(2018-04-07.Python從Zero到One)一、python高級(jí)編程__1.2.3作用域

上一篇文章為:→1.2.2循環(huán)導(dǎo)入

作用域

什么是命名空間

比如有一個(gè)學(xué)校,有10個(gè)班級(jí),在7班和8班中都有一個(gè)叫“小王”的同學(xué),如果在學(xué)校的廣播中呼叫“小王”時(shí),7班和8班中的這2個(gè)人就納悶了,你是喊誰(shuí)呢!!!如果是“7班的小王”的話,那么就很明確了,那么此時(shí)的7班就是小王所在的范圍,即命名空間

globals、locals

在之前學(xué)習(xí)變量的作用域時(shí),經(jīng)常會(huì)提到局部變量和全局變量,之所有稱之為局部、全局,就是因?yàn)樗麄兊淖宰饔玫膮^(qū)域不同,這就是作用域

  • locals
day12_其他知識(shí)-01.png
  • globals
day12_其他知識(shí)-02.png

LEGB 規(guī)則

Python 使用 LEGB 的順序來(lái)查找一個(gè)符號(hào)對(duì)應(yīng)的對(duì)象

locals -> enclosing function -> globals -> builtins

  • locals,當(dāng)前所在命名空間(如函數(shù)、模塊),函數(shù)的參數(shù)也屬于命名空間內(nèi)的變量

  • enclosing,外部嵌套函數(shù)的命名空間(閉包中常見(jiàn))

    def fun1():
      a = 10
      def fun2():
          # a 位于外部嵌套函數(shù)的命名空間
          print(a)
    
    
  • globals,全局變量,函數(shù)定義所在模塊的命名空間

    a = 1
    def fun():
      # 需要通過(guò) global 指令來(lái)聲明全局變量
      global a
      # 修改全局變量,而不是創(chuàng)建一個(gè)新的 local 變量
      a = 2
    
    
  • builtins,內(nèi)建模塊的命名空間。

      Python 在啟動(dòng)的時(shí)候會(huì)自動(dòng)為我們載入很多內(nèi)建的函數(shù)、類,
      比如 dict,list,type,print,這些都位于 __builtin__ 模塊中,
      可以使用 dir(__builtin__) 來(lái)查看。
      這也是為什么我們?cè)跊](méi)有 import任何模塊的情況下,
      就能使用這么多豐富的函數(shù)和功能了。
    
      在Python中,有一個(gè)內(nèi)建模塊,該模塊中有一些常用函數(shù);在Python啟動(dòng)后,
      且沒(méi)有執(zhí)行程序員所寫的任何代碼前,Python會(huì)首先加載該內(nèi)建函數(shù)到內(nèi)存。
      另外,該內(nèi)建模塊中的功能可以直接使用,不用在其前添加內(nèi)建模塊前綴,
      其原因是對(duì)函數(shù)、變量、類等標(biāo)識(shí)符的查找是按LEGB法則,其中B即代表內(nèi)建模塊
      比如:內(nèi)建模塊中有一個(gè)abs()函數(shù),其功能求絕對(duì)值,如abs(-20)將返回20。
    

下一篇文章為:→1.2.4==、is
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 十一:函數(shù)和函數(shù)式編程 11.1 什么是函數(shù)? 函數(shù)是對(duì)程序邏輯進(jìn)行結(jié)構(gòu)化或過(guò)程化的一種編程方法。能將整塊代碼巧妙...
    m風(fēng)滿樓閱讀 445評(píng)論 0 0
  • 三、模塊命名空間 命名空間(名稱空間)中保存了變量名到對(duì)象的映射。向命名空間添加變量名的操作過(guò)程涉及到綁定變量到指...
    常大鵬閱讀 1,895評(píng)論 0 4
  • 1、引言 最近在刷leetcode題的時(shí)候,遇到一個(gè)求最長(zhǎng)回文子串的題目,于是,我寫了如下的代碼: 哎呀,寫了兩個(gè)...
    文哥的學(xué)習(xí)日記閱讀 14,375評(píng)論 6 32
  • 〇、前言 本文共108張圖,流量黨請(qǐng)慎重! 歷時(shí)1個(gè)半月,我把自己學(xué)習(xí)Python基礎(chǔ)知識(shí)的框架詳細(xì)梳理了一遍。 ...
    Raxxie閱讀 19,055評(píng)論 17 410
  • 有種說(shuō)法是:“要么旅行,要么讀書(shū)。身體和靈魂總要有一個(gè)在路上。” 在這樣一個(gè)崇尚旅游的時(shí)代,只要有個(gè)假期,各旅...
    公子小覷閱讀 967評(píng)論 0 2