Python變量及函數嵌套——第七天

1、全局變量和局部變量、上一級變量、
(1)全局變量特點:頂格寫的,沒有縮進,在任意位置都可以調用。
(2)局部變量特點:在任意一個子程序(函數)裏定義的,只在該子程序(函數)內生效。
(3)可以在一個程序中存在相同名稱的局部變量和全局變量,這樣的話,在哪裏打印則輸出哪個變量。示例如下:

name = "ZHM"

def test():
    name = "LLL"
    print(name)
test()
print(name)

#輸出結果:
LLL
ZHM

(4)如果想直接在子程序裏修改全局變量,應該加關鍵字global,如下:

name = "ZHM"

def test():
    global name
    name = "LLL"
    print(name)
test()
print(name)

#輸出結果:
LLL
LLL

(5)由於程序從上到下執行,所以上面的程序修改全局變量後,下面引用的全局變量也跟着修改。

name = "ZHM"

def test1():
    global name
    name = "LLL"
    print(name)

def test2():
    print(name)

test1()
test2()

#輸出結果:
LLL
LLL

換一下執行順序就會不一樣,如下:

name = "ZHM"

def test1():
    global name
    name = "LLL"
    print(name)

def test2():
    print(name)

test2()
test1()

#輸出結果:
ZHM
LLL

(6)先找自己的作用域(偷懶方法:可以看空格),沒有引用全局;修改全局則用global;如果全局是可變類型,可以直接使用對應方法,對內部元素進行操作。如下:

name = ["ooo","lll"]

def test():
    global name
    name.append("ZHM")
    print(name)
test()

#輸出結果:
['ooo', 'lll', 'ZHM']

(7)爲了防止重名,建議書寫規範:全局變量都大寫,局部變量都小寫。
(8)上一級變量關鍵字nonlocal,和global類似。

2、函數嵌套
(1)代碼默認執行順序:從上到下
嵌套函數執行順序:先執行外循環,再執行內循環

def outer():
    def inner():
        print('inner')
    print('outer')
    inner()
outer()
print("ooo")

#輸出結果:
outer
inner
ooo

備註:但是好像爲了避免不必要的麻煩,一般直接調用,不用函數嵌套

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

#輸出結果:
inner
outer

(2)先定義後執行,未定義執行會報錯。

def test1():
    print("test1")
    test2()     #由於在這之前未定義過test2()
test1()

def test2():
    print("test2")

#輸出結果:
報錯

3、關於函數名
(1)函數名可以進行賦值

def test():
    print("123")

new_test = test
new_test()

#輸出結果:
123

4、閉包函數特點
1、是嵌套函數
2、返回一個調用外部變量的函數對象
舉例如下:

def outer():
    name="Python"
    def inner():
        print(name)
    print(inner.__closure__)
    return inner
inn = outer()
inn()

#輸出結果:
(<cell at 0x0000021B7492AB88: str object at 0x0000021B748F5670>,)
Python
發佈了17 篇原創文章 · 獲贊 55 · 訪問量 4435
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章