1. 程式人生 > >預設引數的陷阱自我心得

預設引數的陷阱自我心得

  • 預設引數的陷阱 : 預設引數實際上只有一個值
    • 程式碼1
      • def func(l = 1):
        • l += 1
        • print(l)
      • func()
      • func()
      • func()
    • 程式碼2
      • lst = []
      • def func(a,l = lst):
      • l.append(a)
      • print(l)func(1) # [1]
      • func(2,[]) # [2]
      • func(3) # [1,3]變數是變數,值是值
  • 變數的名字和有多少個值沒有對應關係
  • 我們在看修改的時候:要看修改的是哪一個對應的值而不是變數
  • 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()