lambda表達式
用於表示簡單的函數
func1=lambda 參數:一句話函數體(默認返回函數體內執行的內容)
1.1結構
func=lambda a1,a2 : a1+100
val=func(1,2)
print(val)
#返回101
#不可變類型變化后形成新的字符串-->lambda內部默認返回執行后的值
#原理類似:
def func(a1,a2):
return a1+100
1.2參數變化(0個到多個)
func1=lambda :100#可不寫
func2=lambda a1:a1*10
func3=lambda *args,**kwargs:len(args)+len(kwargs)
1.3參數變量規則
-
lambda內部不能創建變量,只能調用自己的形參
-
和函數查找規則一樣優先自己=—>父級查找—>全局
DATA=100
func4=lambda a1:a1+DATA
v=func4(1)
print(v)#101
DATA=100
def func():
DATA=1000
func4=lambda a1:a1+DATA
v=func4(1)
print(v)#1001
func()
1.5和三元運算符的結合
func5=lambda n1,n2:n1 if n1>n2 else n2
v=func5(111,2)
print(v)
1.4函數體內返回值注意事項
-
不可變數據類型的方法會有返回值,因為原始數據不能修改,只能形成一個新的值
-
可變類型的方法【基本】不會形成新的數據,只會在原始數據上修改,所以這些方法只有默認None返回值
-
但是集合中的集合運算(交並集等),會形成新的數據 即就是會有返回值
#可變類型
info=[]
def func(X):
v=info.append(X)
return v
print(func("gao"))
#None
#split/intersection/union 等同理
#不可變類型
def func1(x):
v=x.strip()
return v
print(func("gao "))#gao 沒有空格
#練習
func1=lambda info:info.split("a")
print(func1("gao"))#["g","o"]
#練習
info=[]
func1=lambda info:info.append("a")
print(func1("gao"))#None
info=[]
func4=lambda a1:info.append(a1)
print(func4(4))
#None
1.5 列表中的lambda函數表達式
func_list=[lambda x:x.strip(),lambda y:y+199,lambda x,y:x+y]
print(func_list[0]("gao "))#gao
print(func_list[1](1))#200
12看代碼寫結果
def func():
num = 10
v4 = [lambda :num+10,lambda :num+100,lambda :num+100,]
for item in v4:
print(item())
func()
#20
#110
#110