一、匿名函数
匿名函数就是没有名字的函数,前面在学习函数的时候使用def来进行函数定义,这里def只能定义有名字的函数。匿名函数使用关键字lambda定义。例如:
lambda x, y=1: x + y
这个函数就是匿名函数,它存在两个参数x和y,其中y为默认参数默认值为1,函数返回x+y。注意这里的函数体x+y不能换行,因此匿名函数主要就是简洁,也不需要写return,它默认就有return。接下来我们看怎么调用它,匿名函数没有名字,因此不能通过函数名加括号调用。匿名函数的定义本身就是一个内存地址:
res = (lambda x, y=1: x + y)(1, 2)
print(res)
## 执行结果:
3
从上我们知道,匿名函数定义是一个内存地址,但是我们没有给这块内存地址进行变量引用。因此在定义时调用一次即会被当成垃圾回收,所以匿名函数适用于不需要重复调用的场景。
二、匿名函数的应用示例
匿名函数只能调用一次,它的典型应用场景是作为函数的参数。我们先看示例:
d = {
'小明': 2000,
'小刚': 5000,
'小红': 10000
}
res = max(d, key=lambda i: d[i])
print(res)
## 执行结果
小红
首先max()函数的功能传入可迭代对象,返回这个可迭代对象的最大值。如果传入字典,则默认安装字典的key进行排序。max函数的key参数可以指定一个函数,用于生成比较的依据。这样就可以知道进行value的比较。这段代码的执行过程是,遍历字典的键,赋给i再获取值进行比较。这里python还支持min()、sort()等函数,都支持这种方式进行比较。接下来我们再看一个示例:
l = ['a', 'b', 'c', 'd']
new_l = map(lambda i: i + 'x', l)
print(new_l)
print(new_l.__next__())
## 执行结果
<map object at 0x7f9266dd2e10>
ax
如上所示,需求给列表l的每个元素加x字符,通过前面的只是我们可以通过列表生成器实现。这里还可以用map函数实现。map函数返回的是一个迭代器。
三、函数的类型提示
python语言比较灵活,我们之前还定义函数时并不知道函数的参数类型,因为在调用时可以传入任意类型。例如:
def func(name, age):
print(name, age)
return 10
func('wfj', 18)
func(1, 'xxx')
python属于动态型语言,也就是变量在赋值时才会确定类型。但是这样使用者可能不按照规范来调用,因此python在3.5以后提供了类型提示功能,可以指示函数调用者在调用时传入什么类型。但是仍然不是强制性的,它只是提示,如果函数调用者依然不按照规范传入函数,也不会报错。
def func(name: str, age: int=88) -> int:
print(name, age)
return 1
func('wfj', 18)
func(1, 'xxx')
如上,我们知道了name提示为字符串,age提示为整型,返回提示也为整型。但是调用依然不会报错,只是如果在Pycharm中变成,Pycharm会给表警告的波浪线。另外提示词这里只是提示,可以在这里写任意内容。这里age如果设置默认值参数,在提示词后写=88即可。
「真诚赞赏,手留余香」
真诚赞赏,手留余香
使用微信扫描二维码完成支付
