filter(lambda x: x>10, li)閉包
語法規則: lambda 參數 : 表達式函數
簡單的函數,能夠不用使用def定義一個函數,使用匿名函數便可性能
函數調用,相似於filter、map等函數裏面,可使用匿名函數來處理spa
提升開發效率,匿名函數的合理利用可以讓那個代碼更加簡潔code
print((lambda x,y:x+y)(11,22)) 33
f = lambda x,y:x+y print(f(11,22)) 33
li = [1,3,34,2,4,6,86,4,4] # def func(n): # if n>4: # return n aa = filter(lambda n:n>4,li) print(list(aa)) [34, 6, 86]
外部不能訪問函數內部變量:blog
def func(): a = 222 #局部變量 print('函數裏邊:',a) return a func() print('函數外面:',a) 函數裏邊: 222 Traceback (most recent call last): File "/home/pyvip/projects/home/pyvip/projects/基礎班/複習.py", line 7, in <module> print('函數外面:',a) NameError: name 'a' is not defined
函數裏面不能修改函數外部變量:遞歸
a = 11 #全局變量 def func(): # global a a += 1 #局部變量 print('函數裏邊:',a) return a func() print('函數外面:',a) File "/home/pyvip/projects/home/pyvip/projects/基礎班/複習.py", line 7, in <module> func() File "/home/pyvip/projects/home/pyvip/projects/基礎班/複習.py", line 4, in func a += 1 #局部變量 UnboundLocalError: local variable 'a' referenced before assignment
函數內部可以訪問函數外部變量:ip
a = 11 #全局變量 def func(): # a = 222 #局部變量 print('函數裏邊:',a) return a func() print('函數外面:',a)
函數裏面和函數外部變量名相同:內存
a = 11 #全局變量 def func(): a = 222 #局部變量 print('函數裏邊:',a) return a func() print('函數外面:',a) 函數裏邊: 222 函數外面: 11
a = 11 #全局變量 def func(): global a #聲明a是個全局變量 a += 1 #局部變量 print('函數裏邊:',a) return a func() print('函數外面:',a) 函數裏邊: 12 函數外面: 12
a = 11 #全局變量 def func(): # global a #聲明a是個全局變量 a = 666 #局部變量 print('外層函數func:',a) def fun1(): nonlocal a #聲明a的修改對外層函數有效 a = 999 print('內層函數fun1:,a) fun1() func() print('函數外面:',a) 外層函數func: 666 內層函數fun1: 999 函數外面: 11
遞歸中能夠函數自身調用自身,可是使用時相似於條 件循環同樣,要有遞歸的終止條件作用域
使用遞歸時,經常可讓代碼更加簡潔 遞歸會佔用比較多的內存,當遞歸次數比較多時,性能就會下降, 所以不建議多使用遞歸
def fun(n): if n==1: return n else: return n*fun(n-1) a = fun(6) print(a) 720
閉包是函數裏面嵌套函數,外層函數返回裏層函數,這種狀況稱之爲閉包 閉包是概念,不是某種函數類型,和遞歸的概念相似,就是種特殊的函數調用 閉包能夠獲得外層函數的局部變量,是函數內部和函數外部溝通的橋樑,大多數時候和和裝飾器一塊兒使用
def fun(): def fun1(): print('嵌套的內層函數') print('-----調用了fun-----') return fun1 result = fun() print(result)
def fun1(): a = 1 def fun2(): #1.函數裏邊嵌套一個函數 print('=====fun2=======',a) #2.外層函數返回的是內層函數的函數名 return fun2 #3.內層函數有引用外層函數的變量 a = fun1() a() =====fun2======= 1