1. 程式人生 > >函數作用域和匿名函數

函數作用域和匿名函數

ict def 作用 效率 註意 提高 函數作用域 使用 lte

一、匿名函數

- lambda # 關鍵字 和三目運算一樣,做一些簡單的函數定義,使代碼更加簡潔
- 語法規則:
  lambda <參數>:表達式

  filter(lambda x: x>10, li)

  d = lambda a,b:a+b
  d(1,2)

- 應用場景:

  1.簡單函數:簡單的函數可以不使用def定義一個函數,使用匿名函數即可
  2.函數調用:類似於filter、map等函數裏面,可以使用匿名函數來處理
  3.提高開放效率:名函數的合理利用能夠讓那個代碼更加簡潔


二、函數作用域
- 函數裏面可以訪問函數外面的變量
- 定義在函數裏面的變量,函數外面是不能訪問的
- 在函數裏面可以訪問最外面的(不可變)變量,但是不能對它修改,但可變類型(list set dict bytearray)就可以修改
- 函數外面定義的變量和函數裏面定義的變量重名時,他們不是一個變量。函數裏面的變量不影響外面的變量

- global和nonlocal
- global
  a = 1 # 全局變量

  def yu():
    global a # global 關鍵字 聲明a是全局變量,聲明後在函數內部就可以修改這個變量
    a = a+519
    print(a)
  yu()

-nonlocal
  def yu():
  a = 1 # 局部變量 在嵌套函數的時候會使用
    def lo():
      nonlocal a # 聲明這個a是局部變量
      a = a + 519
      print(a)
    lo()

  yu()

三、閉包

外部調用函數內層的函數


註意:函數的名字就相當於一個變量


四、遞歸和回調函數

暫時還是暈的

函數作用域和匿名函數