在定义函数的时候,不想给函数起一个名字。这个时候就可以用lambda来定义一个匿名函数
语法:
变量名= lambda 参数:表达式(block)
参数:可选,通常以逗号分隔的变量表达式形式,也就是位置参数
表达式:不能包含循环、return,可以包含if...else...,返回值就是该表达式的结果。
注意:
-表达式中不能包含 循环,return
-可以包含 if...else...语句.
-表达式计算的结果直接返回
1.创建一个匿名函数:
func = lambda :3<2
ret = func()
print(ret)
输出结果:False
2.创建一个带参数的匿名函数:
func = lambda x,y:x+y
ret = func(1,2)
print(ret)
输出结果:3
3.小练习:求两个数的最大值
func = lambda x,y:x if x>y else y
# 注意if 和else 没有 : 不能换行,if判断体写在判断条件前面。
ret = func(100,200) # 传入实参
print(ret)
输出结果:200
4.使用max()求出字典的最大值:
# 一般函数:
dic = {'k1':20,'k2':100,'k3':50}
def func_dic(key):
return dic[key]
ret = max(dic,key=func_dic)
print(ret)
输出结果:k2
匿名函数:
dic = {'k1':20,'k2':100,'k3':50}
ret = max(dic,key=lambda x:dic[x])
print(ret)
输出结果:k2
5.现有两个元组(('a'),('b')),(('c'),('d')),请使用匿名函数生成列表[{'a':'c'},{'b':'d'}]
tup1=(('a'),('b'))
tup2=(('c'),('d'))
ret = zip(tup1,tup2) # 用zip()来得出tuple类型的元素
ret1 = list(map(lambda tup:{tup[0]:tup[1]},ret)) # 利用索引
print(ret1)
输出结果:[{'a': 'c'}, {'b': 'd'}]
1.定义:
内部函数包含对外部作用域而非全剧作用域名字的引用,该内部函数称为闭包函数
# 函数内部定义的函数称为内部函数
2.创建闭包函数:
def say_hello(name):
def inner():
print('hello:',name)
return inner
ret = say_hello('zs')
ret() # 前面用声明声明变量 承接返回的值,
# 调用内部函数时就用该变量名调用,因为返回承接的都是
# 函数的地址
输出结果:hello:zs
3.判断闭包函数:
判断闭包函数的方法__closure__
输出的__closure__是一个cell对象表示是闭包函数,输出的是None 表示不是闭包函数。
def say_hello(name):
def inner():
print('hello:',name)
print(inner.__closure__) # 判断闭包函数
return inner
ret = say_hello('zs')
ret() # 前面用声明声明变量 承接返回的值,
# 调用内部函数时就用该变量名调用,因为返回承接的都是
# 函数的地址
输出结果:(
hello: zs
4.python 中怎么创建闭包:
三点: