日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

python基礎(chǔ)7(函數(shù) Ⅱ)

 印度阿三17 2019-02-14

1、python代碼運(yùn)行遇到函數(shù)時(shí)

從python解釋器開(kāi)始執(zhí)行之后,就在內(nèi)存中開(kāi)辟了一個(gè)空間
每當(dāng)遇到一個(gè)變量的時(shí)候,就把變量名和值之間的對(duì)應(yīng)關(guān)系記錄下來(lái)。
但是當(dāng)遇到函數(shù)定義的時(shí)候解釋器只是象征性的將函數(shù)名讀入內(nèi)存,表示知道這個(gè)函數(shù)的存在了,至于函數(shù)內(nèi)部的變量和邏輯解釋器根本不關(guān)心。
等執(zhí)行到函數(shù)調(diào)用的時(shí)候,python解釋器會(huì)再開(kāi)辟一塊內(nèi)存來(lái)存儲(chǔ)這個(gè)函數(shù)里的內(nèi)容,這個(gè)時(shí)候,才關(guān)注函數(shù)里面有哪些變量,而函數(shù)中的變量會(huì)存儲(chǔ)在新開(kāi)辟出來(lái)的內(nèi)存中。函數(shù)中的變量只能在函數(shù)的內(nèi)部使用,并且會(huì)隨著函數(shù)執(zhí)行完畢,這塊內(nèi)存中的所有內(nèi)容也會(huì)被清空。

2、命名空間

  • “存放名字與值的關(guān)系”的空間
  • 內(nèi)置命名空間
    存放的是python解釋器提供的名字(input,print,str...),拿過(guò)來(lái)就可以使用,內(nèi)置命名空間的名字在解釋器啟動(dòng)的時(shí)候就被放入內(nèi)存
  • 全局命名空間
    當(dāng)前模塊的命名空間
    當(dāng)代碼執(zhí)行的時(shí)候,從上到下按執(zhí)行的過(guò)程加載到內(nèi)存
  • 局部命名空間
    函數(shù)內(nèi)部定義的名字
    隨函數(shù)調(diào)用而創(chuàng)建,隨函數(shù)結(jié)束而刪除
  • 命名空間的加載順序
    內(nèi)置命名空間 -> 全局命名空間 -> 局部命名空間
  • 命名空間的取值順序
    局部命名空間 -> 全局命名空間 -> 內(nèi)置命名空間

3、作用域

全局作用域:內(nèi)置命名空間和全局命名空間中的名字都屬于全局作用域
局部作用域:函數(shù)(局部命名空間中的名字屬于局部作用域)

#查看局部作用域中的名字
locals()

#查看全局作用域中的名字
globals()

4、global

對(duì)于不可變數(shù)據(jù)類(lèi)型,局部中可以獲得其值,但是不能修改
如果要修改,可以通過(guò)global關(guān)鍵字

a = 1
b = 2
def func():
    global a
    a = 6      #合法
    b = 4       #不合法操作

5、函數(shù)嵌套

def outer():
    def inner():
        print('---')
    inner()

outer()

6、nonlocal

在嵌套的函數(shù)中,如果我們要修改上層函數(shù)的變量,通過(guò)上面global是做不到的,因?yàn)間lobal獲取的是全局中的那個(gè)變量,所以可以通過(guò)nonlocal來(lái)獲取(只能獲取最接近的那層,也就是上一層中的變量)

a = 1
def outer1():
    a = 2
    def outer2():
        a = 3
        def inner():
            nonlocal a
            a = 5
        inner()
    outer2()

outer1()

#outer2中的a = 3將變成a = 5

7、函數(shù)名的本質(zhì)是內(nèi)存地址,可以作為容器元素,返回值,參數(shù)

#函數(shù)名可以賦值
def func():
    print('I am func')

func2 = func
func2()    #實(shí)際上執(zhí)行的是func

#函數(shù)名可以作為容器的元素
l = [func,fun2]
for f in l:
    f()

#函數(shù)名可以作為返回值
def ohyeah(f):
    f()
    return f

8、閉包

閉包就是內(nèi)層函數(shù)調(diào)用外層函數(shù)的變量

def outer():
    a = 1
    def inner():
        print(a)

#如果是閉包,調(diào)用__closure__將返回cell
def outer():
    a = 1
    def inner():
        print(a)
    print(inner.__closure__)
outer()

#閉包的用法就是在函數(shù)外部使用其內(nèi)部的函數(shù)。
#可以使外部函數(shù)的變量無(wú)需重復(fù)創(chuàng)建
def outer():
    a = 1
    def inner():
        print(a)
    return inner
out = outer()
out()
out()

9、三目運(yùn)算符

def max(a,b):
    return a if a>b else b

 

來(lái)源:http://www./content-1-114301.html

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多