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