首页 > 解决方案 > 在 Python 中在函数参数(isinstance)中使用运算符时出错

问题描述

我似乎无法理解这个函数的输出:

def is_integer(num1, num2):
        if isinstance(num1 and num2, int):
            return 'Yes'
        else:
            return 'No'

print(is_integer(1.4, 2))

这将输出“是”,但它不应该因为 1.4 和 2 不是两个整数。有什么帮助吗?

标签: pythonargumentsisinstance

解决方案


and运算符在 Python 中的工作方式是:

表达式x and y首先计算x; 如果x为假,则返回其值;否则,y评估并返回结果值。

在 Python 中,None, False, 数字零和空集合是假的;几乎其他一切都是真的。1

所以,1.4 and 2意味着2,因为1.4不为零。

所以,isinstance(1.4 and 2, int)意味着isinstance(2, int)

并且2是一个int.


您可能想要的是:

if isinstance(num1, int) and isinstance(num2, int):

… 或者:

if all(isinstance(num, int) for num in (num1, num2)):

1. 为避免具体TrueFalse值混淆以及真假值更抽象的概念,大多数 Python 开发人员将None// Falsezero/empty 称为“falsey”而不是“false”,其他一切都称为“truthy”而不是“真的”。但是文档避免了这种可爱,我在此处引用文档。


推荐阅读