# 匿名函數(shù)
#lambda 自帶return 匿名函數(shù) 沒有名字的函數(shù)
fun1=lambda a,b:a+b
#上面的匿名函數(shù)可以轉(zhuǎn)化為有名函數(shù):
def fun(a):
? ? return a+a
li=[1,2,3]
fil=filter(lambda x:x>1,li)
print(list(fil))
print(fun1(100,10))
結(jié)果:
[2,3],110
# 函數(shù)作用域
#函數(shù)作用域 ,函數(shù)內(nèi)變量和函數(shù)外的變量區(qū)別
#函數(shù)外變量為全局變量盖灸,函數(shù)內(nèi)變量稱為局部變量
#1,函數(shù)外部不能使用函數(shù)內(nèi)變量
#2,函數(shù)內(nèi)可調(diào)用函數(shù)外部變量
#3,函數(shù)內(nèi)部不能修改外部變量
? ? 使用global申明全局變量蚁鳖,即可改變
? ? 使用nonlocal申明局部變量(對(duì)于嵌套式函數(shù)使用)
? ? 設(shè)定形參輸入全局變量,只是使用不能改變?nèi)肿兞恐?/p>
#4,函數(shù)內(nèi)部變量與外部變量重名但使用不同地址
#python 內(nèi)存池中值比較小的數(shù)值有固定地址
#5,函數(shù)只有調(diào)用時(shí)才會(huì)執(zhí)行
#6,嵌套式的函數(shù),也分全局函數(shù)和局部函數(shù)
? ? 全局下赁炎,一般不可調(diào)用局部函數(shù)(若要調(diào)用,使用以下形式)
def funa():
? ? print('this is funa')
? ? def funb():
? ? ? ? print('this is funb')
? ? return funb
funa()()--a醉箕,b都會(huì)調(diào)用(#閉包 外層函數(shù)返回內(nèi)層函數(shù)的名字,一般結(jié)合裝飾器使用)
#global,nonlocal:
a=1
def fun():
? ? global a
? ? a+=1
? ? print(a)
fun()
print(a)
結(jié)果:
2,2
a=1
def funa():
? ? a=1
? ? def funb():
? ? ? ? nonlocal a
? ? ? ? a+=1
? ? ? ? print(a)
? ? funb()
? ? print(a)
funa()
print(a)
結(jié)果:
2徙垫,2讥裤,1
# 遞歸與回調(diào)
# 遞歸
#函數(shù)自身調(diào)用自身
eg:
def fun():
? ? print('good')
? ? fun()
fun()
--> fun()#一直執(zhí)行,直到超出最大遞歸深度姻报,就會(huì)報(bào)錯(cuò)
a=5
def fun1(a):
? ? if a==1:
? ? ? ? return 1
? ? else:return a*fun1(a-1)
print(fun1(a))-->120
# 回調(diào)
#將函數(shù)名字當(dāng)作參數(shù)己英,傳遞給回調(diào)函數(shù),
#回調(diào)函數(shù)吴旋,參數(shù)后加()既是調(diào)用函數(shù)
eg:
def funa():
? ? print('nihao')
def funb():
? ? print('hello')
def func(fun1):
? ? fun1()
func(funa)-->nihao