Lambda函数返回全None列表的原因排查及生成数字列表问询
问题原因
list.append(x)这个方法只会把元素添加到列表中,本身没有返回值(实际返回None)。- 你写的列表推导式
[my_lis.append(x) for x in range(m)],本质是把每一次append调用的返回值收集起来,所以最终得到的就是全None的列表。 - 就算改成打印x,
print(x)同样返回None,推导式还是会生成全None的列表,只是循环过程中额外打印了数字而已。
正确实现方法
如果你想生成数字列表,根本不需要额外维护my_lis变量,直接用lambda返回range转换的列表就行:
l = lambda m: list(range(m)) print(l(10)) # 输出: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
要是非得用append的逻辑(完全没必要,可读性差),可以这么写:
# 更清晰的普通函数写法(推荐) def gen_list(m): my_lis = [] for x in range(m): my_lis.append(x) return my_lis print(gen_list(10)) # 硬要套lambda的写法(不推荐,太绕) l = lambda m: (temp := [], [temp.append(x) for x in range(m)], temp)[2] print(l(10))
内容的提问来源于stack exchange,提问作者mehrdad
相关产品推荐
相关产品推荐

