python 範圍,python

來源:互聯網
上載者:User

python 範圍,python

在寫範圍前,先來瞭解下局部變數和全域變數。理解局部變數和全域變數後,範圍的概念就很好理解了。

局部變數:局部變數只能在局部訪問到,當超過其範圍時,變失去作用。

全域變數:無論在任何範圍都可以使用。當前範圍有相同變數名的局部變數時,局部變數生效。

(忘記準確定義了,忘掉他吧)

 1、Python中無 塊集範圍            Java/C#有塊集範圍            Python/JavaScript無塊集範圍 所謂塊集範圍,需要先瞭解Python的代碼塊概念。Python遵從嚴格的縮排標準,可以認為處在同一縮排之間的代碼即為一個代碼塊。如if判斷,for,while迴圈等。
 if 1==1:  #if,for 等構成一個代碼塊    name = 'zhang'#代碼塊結束 print(name)

  實際運行中,print(name)有輸出值,但是其和if位於相同的縮排位置,也就是屬於不同的代碼塊。因此,Python中沒有塊集範圍

 2、Python中以函數為範圍

先來看個例子:

def func():  #函數內定義的變數只能在函數內使用,無法再外部參考(以函數為範圍)    name = 'zhang'print(name)>>>Traceback (most recent call last):  File "C:/Users/Administrator/PycharmProjects/s13/day10/範圍.py", line 11, in <module>    print(name)NameError: name 'name' is not defined

  當運行上面這段代碼時,報錯了!Python文法中,函數體為單獨的範圍。就行在運行代碼時,遇到函數預設是不執行函數體裡面的代碼的,等待調用函數後才會執行。因此,函數內定義的變數只能在函數內調用。

3、Python存在範圍鏈,當前範圍找不到的話則往上找
name = 'zhang'def func():    name='a'    #print(name)    def f2():        name='b'        print(name)    f2()func()>>>b

  變數name在func和f2中都有定義,執行func()的時候,先賦值name='a',然後執行f2(),重新定義name = 'b',在執行print(name)的時候,輸出的結果為‘b’

在函數未執行之前,範圍和範圍鏈以全部確定。

name ='alex'def f1():    print(name) #f1繼承自己的範圍    def f2():    name = 'eric'    f1()f2() #執行f1()>>>alex
name = 'zhang'def f1():    print(name)def f2():    name = 'eric'    #print(name)    return f1ret = f2()ret()>>>zhang

  到這裡,Python的範圍基本算整理完了,在編寫Python檔案的過程中,需要注意變數的範圍,以免使用變數的時候引用錯誤或者找不到變數。

最後來個燒腦的,分析下最後的執行結果:

li = [lambda :x for x in range(10)]r = li[0]()print(r)>>>9

  

#li為列表

#li內的元素為:lambda運算式,函數

#函數在未調用前,內部代碼不執行

#li[0]的輸出結果為一個個函數體的記憶體位址,即li[0]為函數

#li[0]()執行函數

#先執行for迴圈,迴圈的結果為9,然後把9賦值給x

#因為for迴圈執行10次,所有li的長度為10,裡面的每個元素都為9。(x相對於for迴圈來說位於迴圈之外,因此x獲得的是for迴圈的執行結果,而不是0-9的值)

最後推薦下武sir的《五句話搞定JavaScript範圍》

 

 

 

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.