2016-09-29 123 views
1

我正在测试Python的布尔表达式。当我运行下面的代码:Python布尔比较

x = 3 
print type(x) 
print (x is int) 
print (x is not int) 

我得到下面的结果:当清楚地x是一个

<type 'int'> 
False 
True 

为什么(X为int)返回false和(x是不是int)返回true整数类型?

+4

'int'是一个类。如果你输入'int',你会得到'' –

+9

'is'比较引用。你想'isinstance(x,int)' –

+0

Python不是英文的。 'is'运算符做了一些非常具体的事情,看起来与你期望的不同。 – deceze

回答

0

两者如果你想使用is你应该做的:

>>> print (type(x) is int) 
True 
+0

谢谢大家帮助我理解Python的'is'运算符。我读过'是'可以用来检查标识符是否是特定类型。感谢您的编码器为我展示了这样做的正确语法。 –

2

做到这一点,最好的办法是用isinstance()

所以你的情况:

x = 3 
print isinstance(x, int) 

关于蟒蛇is

运营商is和对象标识is not测试:X是y是真的 当且仅当x和y是相同的对象。

docs

1

尝试输入这些到您的解释:

type(x) 
int 
x is 3 
x is not 3 
type(x) is int 
type(x) is not int 

之所以x is int是假的它是问号码3和P ython int类表示相同的对象。这应该是相当清楚的,这是错误的。

作为一个附注,Python的is关键字可以以一些意想不到的方式工作,如果您不确切知道它在做什么,并且几乎可以肯定地避免它,如果您曾经测试过相等性。也就是说,在实际的程序之外进行实验是一个非常好的主意。