函數作用域和匿名函數
一、匿名函數
- 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()
三、閉包
外部調用函數內層的函數
註意:函數的名字就相當於一個變量
四、遞歸和回調函數
暫時還是暈的
函數作用域和匿名函數