python中匿名函数通过什么声明_什么是匿名函数和闭包函数(python)

一.匿名函数:

在定义函数的时候,不想给函数起一个名字。这个时候就可以用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 中怎么创建闭包:

三点:

闭包函数必须有内嵌函数

内嵌函数需要引用该嵌套函数上一级namespace中的变量

闭包函数必须返回内嵌函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值