Python學習:函數進階

來源:互聯網
上載者:User

標籤:nbsp   eva   定義   global   display   記憶體位址   包含   技術分享   oca   

本節要點:命名空間及範圍,函數嵌套,函數名本質,閉包

命名空間:

  命名空間的本質:存放名字與值的綁定關係。

三種命名空間:

  全域命名空間

  局部命名空間

  內建命名空間

三種命名空間之間的載入與取值順序:

  載入順序:內建命名空間(程式運行前載入)->全域命名空間(程式運行中:從上到下載入)->局部命名空間(程式運行中:調用時才載入)

取值:

  在局部調用:局部命名空間->全域命名空間->內建命名空間

  在全域調用:全域命名空間->內建命名空間

範圍:

  範圍就是作用範圍,按照生效範圍可以分為全域範圍和局部範圍。

  全域範圍:包含內建名稱空間、全域名稱空間,在整個檔案的任意位置都能被引用、全域有效。

  局部範圍:局部名稱空間,只能在局部範圍生效。

  globals和locals一個是全域,一個是局部。

函數的嵌套調用:

  

def max2(x,y):    m  = x if x>y else y    return mdef max4(a,b,c,d):    res1 = max2(a,b)    res2 = max2(res1,c)    res3 = max2(res2,d)    return res3# max4(23,-7,31,11)
函數的嵌套調用
def f1():    print("in f1")    def f2():        print("in f2")    f2()f1()
函數的嵌套定義(一)
def f1():    def f2():        def f3():            print("in f3")        print("in f2")        f3()    print("in f1")    f2()    f1()
函數的嵌套定義(二)

函數的範圍鏈:

def f1():    a = 1    def f2():        print(a)    f2()f1()
範圍鏈(一)
def f1():    a = 1    def f2():        def f3():            print(a)        f3()    f2()f1()
範圍鏈(二)
def f1():    a = 1    def f2():        a = 2    f2()    print(‘a in f1 : ‘,a)f1()
範圍鏈(三)

    nonlocal關鍵字

# 1.外部必須有這個變數
# 2.在內建函式聲明nonlocal變數之前不能再出現同名變數
# 3.內部修改這個變數如果想在外部有這個變數的第一層函數中生效
def f1():    a = 1    def f2():        nonlocal a        a = 2    f2()    print(‘a in f1 : ‘,a)f1()
nonlocal關鍵字

 函數名的本質:

  函數名的本質就是存函數的記憶體位址

  1.可以被引用

  2.可以被當作容器類型的元素

  3.可以當作函數的參數和傳回值

小總結:就當變數用就行了。

閉包:

  內建函式包含對外部範圍而非全域範圍名字的引用,該內建函式稱為閉包函數。

def func():    name = ‘eva‘    def inner():        print(name)    return innerf = func()f()
閉包函數常見用法
#輸出的__closure__有cell元素 :是閉包函數def func():    name = ‘eva‘    def inner():        print(name)    print(inner.__closure__)    return innerf = func()f()#輸出的__closure__為None :不是閉包函數name = ‘egon‘def func2():    def inner():        print(name)    print(inner.__closure__)    return innerf2 = func2()f2()
判斷是否是閉包
def wrapper():    money = 1000    def func():        name = ‘eva‘        def inner():            print(name,money)        return inner    return funcf = wrapper()i = f()i()
閉包嵌套
from urllib.request import urlopendef index():    url = "http://www.cnblogs.com/Eva-J/articles/7156261.html"    def get():        return urlopen(url).read()    return getxiaohua = index()content = xiaohua()print(content)
用閉包擷取網頁內容

閉包引出下一課,裝飾器。。。。。。

總結:

  略

 

Python學習:函數進階

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.