預設引數的陷阱自我心得
阿新 • • 發佈:2018-11-05
- 預設引數的陷阱 : 預設引數實際上只有一個值
- 程式碼1
- def func(l = 1):
- l += 1
- print(l)
- func()
- func()
- func()
- def func(l = 1):
- 程式碼2
- lst = []
- def func(a,l = lst):
- l.append(a)
- print(l)func(1) # [1]
- func(2,[]) # [2]
- func(3) # [1,3]變數是變數,值是值
- 程式碼1
- 變數的名字和有多少個值沒有對應關係
- 我們在看修改的時候:要看修改的是哪一個對應的值而不是變數
- def func(l = []): # 在函式定義的時候 建立了個[]
- pass # 對於預設引數來說,[]只定義一次
- def func2(a = 0):
- a += 1 a = a + 1 = 0 + 1 = 1 區域性變數 會隨著這個函式的呼叫而消失
- print(a)func2()func2()
- 閉包的概念和程式碼
- 閉包: 內部函式使用了外部函式的變數,內部函式就是一個閉包
- 程式碼
- def func(*args):
- sum_num = 0
- for num in args:
- sum_num += num
- def inner():
- return sum_num
- return inner
- inner = func(1,2,3,4)
- inner()