我似乎无法将这个函数的输出包裹住:
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都不都是整数。 有帮助吗?
答案 0 :(得分:2)
and
运算符在Python中的工作方式是:
表达式
x and y
首先计算x
;如果x
为假,则返回其值;否则,将评估y
并返回结果值。
在Python中,None
,False
,数字零和空集合为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。为了避免特定的True
和False
值与更真实的true和false值之间的混淆,大多数Python开发人员将None
/ False
/ zero / empty称为“假”而不是“假”,其他所有内容都是“真实”而不是“真”。但是文档避免了这种可爱,我在这里引用文档。
答案 1 :(得分:0)
isinstance(num1 and num2, int)
与
相同t1 = num1 and num2
if isinstance(t1, int)
两个数字之间and的结果将返回第一个Falsey值(如果存在),否则返回表达式中的最后一个值。
一些例子:
In [24]: 1.4 and 2
Out[24]: 2
In [25]: 1.4 and 2 and 3
Out[25]: 3
In [26]: 1.4 and 0 and 2
Out[26]: 0
有关更多信息,请参见Strange use of python's and / or operator。
如果要同时测试两者,则必须分别进行测试:
def is_integer(num1, num2):
if isinstance(num1, int) and isinstance(num2, int):
return 'Yes'
return 'No'
这是一种更加怪异的写作方式
def is_integer(num1, num2):
if all(isinstance(n, int) for n in (num1, num2)):
return 'Yes'
return 'No'
...具有all
函数,该函数可泛化为两个以上的参数。
更妙的是,让您的函数接受可变数量的参数:
def is_integer(*args):
if all(isinstance(n, int) for n in args):
return 'Yes'
return 'No'
更好的是,返回布尔结果:
def is_integer(*args):
return all(isinstance(n, int) for n in args)