lzb1001 发表于 2023-6-7 20:57:38

为何上面那个有返回,下面那个没有返回?

>>> lambda x: 2 * x + 1
<function <lambda> at 0x000001C68B233438>
>>> g = lambda x: 2 * x + 1
>>> g(5)
11


>>> lambda x: x if x % 2 else None
<function <lambda> at 0x00000227DA115438>
>>> a = lambda x: x if x % 2 else None
>>> a(8)
>>>

sfqxx 发表于 2023-6-7 21:00:13

上面的 lambda 函数 为 g = lambda x: 2 * x + 1,它会对输入的参数 x 进行计算并返回结果,因此调用 g(5) 的时候会得到返回值 11。

而下面的 lambda 函数为 a = lambda x: x if x % 2 else None,它的逻辑是:当输入的参数 x 是奇数的时候,返回 x,否则返回 None。所以,当我们调用 a(8) 的时候,由于 8 是偶数,根据 lambda 函数的定义,应该返回 None,因此没有返回值。

需要注意的是,在 Python 中,默认情况下,如果函数没有使用 return 语句明确地指定返回值,那么 Python 会隐式地将函数结果设为 None。但是在这里,lambda 函数显式地指定了返回值(即 x if x % 2 else None),因此不能依赖于 Python 的默认行为。

求最佳答案{:10_254:}

lzb1001 发表于 2023-6-7 21:16:01

sfqxx 发表于 2023-6-7 21:00
上面的 lambda 函数 为 g = lambda x: 2 * x + 1,它会对输入的参数 x 进行计算并返回结果,因此调用 g(5)...

当输入的参数 x 是奇数的时候,返回 x,否则返回 None。<---偶数不是有返回值None吗?

当我们调用 a(8) 的时候,由于 8 是偶数,根据 lambda 函数的定义,应该返回 None,所以我理解成调用 a(8) 的时候返回None

smallwh 发表于 2023-6-7 21:56:36

在Python中,8%2的结果为0,即取8÷2的余数。而0代表的是False(可以通过bool(0)验证,1代表的是True),所以会执行else代码块返回None

歌者文明清理员 发表于 2023-6-7 22:20:33

下面的有返回只不过是None而已嘛,print一下就知道咯
页: [1]
查看完整版本: 为何上面那个有返回,下面那个没有返回?