鍍金池/ 問答/Python  網(wǎng)絡安全/ [初學] Python 中嵌套函數(shù)聲明global的問題

[初學] Python 中嵌套函數(shù)聲明global的問題

兩段代碼如下,求教為什么L作為list時候可以正常使用,L作為int的時候就要內外都聲明global才能行呢?

def createCounter():
    L = []
    def counter():
        L.append('')
        return len(L) 
    return counter
    
counterA = createCounter()
print(counterA(), counterA(), counterA(), counterA(), counterA()) # 1 2 3 4 5
counterB = createCounter()
if [counterB(), counterB(), counterB(), counterB()] == [1, 2, 3, 4]:
    print('測試通過!')
else:
    print('測試失敗!')
def createCounter():
    global L
    L = 0
    def counter():
        global L
        L = L +1
        return L
    return counter

counterA = createCounter()
print(counterA(), counterA(), counterA(), counterA(), counterA()) # 1 2 3 4 5
counterB = createCounter()
if [counterB(), counterB(), counterB(), counterB()] == [1, 2, 3, 4]:
    print('測試通過!')
else:
    print('測試失敗!')
    
回答
編輯回答
尛憇藌
def createCounter():
    L = 0
    def counter():
        B = L +1
        return B
    return counter
c = createCounter()
print([c(),c(),c()])

你試一下這個。
數(shù)值是常量,而list這種數(shù)據(jù)結構,變量保存的是引用地址。和變量作用域以及變量的數(shù)據(jù)類型也有關。

def createCounter():
    L = 0
    def counter():
        nonlocal L
        L += 1
        return L
    return counter
c = createCounter()
print([c(),c(),c()])

不知道你為什么要這么用,可以去了解一下“閉包”、“變量作用域”等相關知識。

2018年9月21日 21:55