本文首发于公众号:Hunter后端
原文链接:Python面试必备二之 lambda 表达式、函数传参 args 和 kwargs、垃圾回收机制和上下文管理器
本篇笔记主要介绍 Python 面试过程中关于 Lambda 表达式、函数传参、垃圾回收机制等问题,大致如下:
- Python 中 Lambda 表达式是什么,有什么用
- 函数的参数 args 怎么用,kwargs 怎么用
- Python 怎么进行垃圾回收,都有哪几种类型
- Python 上下文是什么,怎么定义上下文
以下是本篇笔记目录:
- Lambda 表达式
- 函数传参 args 和 kwargs
- 垃圾回收机制
- 上下文管理器
1、Lambda 表达式
Lambda 表达式,即 Lambda 函数,是一个匿名函数,也就是说我们可以创建一个不需要定义函数名的函数。
1. Lambda 函数的定义和调用
比如对于下面的两数相加的函数:
def add(x, y):
return x + y
我们可以使用 lambda 函数表示如下:
add_lambda = lambda x, y: x + y
对于 add 函数和 add_lambda 匿名函数,这两个函数的效果是一致的,都是对于输入的两个参数进行相加,然后返回:
print(add(1, 3))
print(add_lambda(1, 3))
Lambda 函数的定义方式其实很简单:
lambda x, y: x + y
使用 lambda 修饰,表示定义一个函数,之后跟着的 x 和 y 表示输入的参数,冒号 :
后跟着的即为需要 return 的函数逻辑,这里是相加。
2. Lambda 函数的使用
除了前面直接调用的使用场景,Lambda 还有一个比较常用的场景,就是用在 Python 的内置函数中,比如 map,sorted 等。
下面以两个示例来介绍 Lambda 的使用。
1) 获取两个列表对应位置之和
给定两个列表,获取这两个列表对应索引位置的和,形成一个新列表返回,这里使用 Python 的 map 函数和 Lambda:
a = [1, 2, 3]
b = [4, 5, 6]
c = list(map(lambda x, y: x + y, a, b))
print(c)
# [5, 7, 9]
这里使用的 Lambda 函数接收两个参数,其来源是 a 和 b 两个列表。
2) 对字典列表根据指定 key 排序
我们有一个字典列表如下:
s = [{
"a": 6}, {
"a": 19}, {
"a": 3}, {
"a": 7}]
如果我们想要对其根据元素的 a 这个 key 的值进行从小到大进行排序,其操作如下:
sort_s = sorted(s, key=lambda x: x["a"])
print(sort_s)
# [{'a': 3}, {'a': 6}, {'a': 7}, {'a': 19}]
2、函数传参 args 和 kwargs
当我们定义一个函数的时候,需要为其指定参数,比如一个两数相加的函数示例如下:
def add(x, y):
return x + y
而如果我们想要实现一个函数,可能会传入两个数,也可能传入三个、四个,甚至七八个数字,然后返回其和,这个能实现吗?
可以,这个就需要用到我们的可变参数了,也就是这里的 args 和 kwargs。
1. args
在定义函数中,如果我们不确定会传入多少个参数,我们可以使用 args 这个可变参数,它的作用是将不定量的参数按照顺序以 tuple 元组传入,在函数的定义中,前面加一个 *
号即可完成定义。
比如我们想实现一个不定量数字相加然后返回的函数:
def add_n(*args):
print("参数 args 内容为:", args)
total = 0
for num in args:
total += num
return total
print(add_n(1, 2))
print(add_n(1, 2, 3, 4))
print(add_n(1, 2, 3, 4, 5