
在 Python 中,int 是一个内置类(),而变量 k 通常是该类的实例(如整数 3);用 != 直接比较实例与类,永远返回 True,因为值与类型本质不同。正确判断应使用 isinstance(k, int)。
在 python 中,`int` 是一个内置类(`
你遇到的问题源于对 Python 类型系统的核心误解:int 不是“整数类型字面量”,而是表示整数类型的类对象本身。
运行以下代码即可直观验证:
>>> int <class 'int'> >>> type(42) <class 'int'> >>> 42 == int False >>> type(42) == int True
可见,int 是一个类(type 的实例),而 k(例如 k = 3)是该类的一个实例(int 的实例)。因此,表达式 k != int 实质是在比较一个整数值(如 3)和一个类对象(
✅ 正确的类型检查方式是使用 isinstance():
立即学习“Python免费学习笔记(深入)”;
def falling(n, k):
if not isinstance(k, int) or k > n: # ✅ 检查 k 是否为 int 类型的实例
return "error"
elif k <= 0:
return 1
else: # k > 0 已隐含在前序条件中,可简化
return n * falling(n - 1, k - 1)
print(falling(5, 3)) # 输出: 60⚠️ 注意事项:
- type(k) is int 也可工作,但 isinstance(k, int) 更健壮(支持继承场景,如自定义子类);
- 避免使用 k is int 或 k == int —— 这是在比较对象身份或值相等性,语义错误;
- 若还需校验 k 是否为非负整数,建议补充 k
总结:类型检查 ≠ 值比较。Python 中一切皆对象,int 是类对象,k 是实例对象;用 isinstance() 是语义清晰、安全可靠的标准实践。










