Python3编写成员测试函数返回None问题求助
解决Python成员测试函数返回None的问题
我来帮你分析下代码里的问题,以及对应的修复方案:
问题根源
你的函数返回None主要有两个原因:
- 参数被无端覆盖:函数开头的
x = []和num = int()直接把调用时传入的有效参数替换成了空列表和0(int()默认返回0),导致后续的成员判断完全基于错误的数值。 - 函数缺少默认返回值:只有当
num in x为True时函数才返回True,但当条件不满足时,函数没有任何return语句,Python会默认返回None。
简单说,当你调用bln(x, num)时,函数内部立刻把传入的有效列表和数值替换成了空列表和0,这时候判断0 in []显然是False,函数没有返回值,最终输出None。
修复后的代码
首先移除函数内部覆盖参数的代码,然后确保函数在所有分支都有返回值:
def bln(x, num): # 直接使用传入的参数进行判断 if num in x: return True # 补充False的返回分支 return False num = 4 x = [i for i in range(1, 5)] print(x) y = bln(x, num) print(y)
运行后会输出:
[1, 2, 3, 4] True
更简洁的写法
其实可以直接返回num in x这个布尔表达式,因为它本身就会返回True或False,不需要额外的条件判断:
def bln(x, num): return num in x
这个版本的函数逻辑更清晰,代码更简洁,效果和上面的修复版完全一致。
内容的提问来源于stack exchange,提问作者Mahesh Hegde




