相关疑难解决方法(0)

为什么使用'=='或'is'比较字符串有时会产生不同的结果?

我有一个Python程序,其中两个变量设置为该值'public'.在条件表达式中,我的比较var1 is var2失败了,但是如果我将其更改为var1 == var2它则返回True.

现在,如果我打开我的Python解释器并进行相同的"是"比较,它就会成功.

>>> s1 = 'public'
>>> s2 = 'public'
>>> s2 is s1
True
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?

python string comparison identity equality

1076
推荐指数
13
解决办法
148万
查看次数

"是"运算符与整数意外行为

为什么以下在Python中出现意外行为?

>>> a = 256
>>> b = 256
>>> a is b
True           # This is an expected result
>>> a = 257
>>> b = 257
>>> a is b
False          # What happened here? Why is this False?
>>> 257 is 257
True           # Yet the literal numbers compare properly
Run Code Online (Sandbox Code Playgroud)

我使用的是Python 2.5.2.尝试一些不同版本的Python,似乎Python 2.3.3显示了99到100之间的上述行为.

基于以上所述,我可以假设Python在内部实现,使得"小"整数以不同于大整数的方式存储,is运算符可以区分.为什么泄漏抽象?当我不知道它们是否是数字时,比较两个任意对象以查看它们是否相同的更好的方法是什么?

python int identity operators python-internals

476
推荐指数
11
解决办法
6万
查看次数

Python - 将长整数值与==进行比较

可能重复:
Python"is"运算符使用整数意外运行

昨晚做了什么奇怪的事情

if max_urls is 0:
    max_urls = 10
Run Code Online (Sandbox Code Playgroud)

总是会返回false ...即使max_urls为0 ....它也是从数据库中分配的.当我做了一个

print type(max_urls)
Run Code Online (Sandbox Code Playgroud)

会回来的

<type 'long'> 0
Run Code Online (Sandbox Code Playgroud)

这似乎是正确的,但它总是会返回虚假.

如果我把它改成了

if max_urls == 0:
    max_urls = 10
Run Code Online (Sandbox Code Playgroud)

那么当它为0时它最终会返回true.为什么==和之间的区别是?

python variables conditional-operator

7
推荐指数
2
解决办法
4万
查看次数

使用'=='和'是'比较字符串

可能的重复:
"is"关键字可能等效于Python中的等式运算符的类型
Python"is"运算符与整数意外行为

你好.

我有一个问题,或许可能会启发我,而不是我要问的问题.

考虑一下:

>>> x = 'Hello'
>>> y = 'Hello'
>>> x == y
True
>>> x is y
True
Run Code Online (Sandbox Code Playgroud)

我一直使用比较运算符.我还读到了is比较内存地址,因此在这种情况下,返回True

所以我的问题是,这是比较Python中变量的另一种方法吗?如果是,那为什么不使用?

另外我注意到在C++中,如果变量具有相同的值,则它们的内存地址是不同的.

{ int x = 40; int y = 40; cout << &x, &y; }
0xbfe89638, 0xbfe89634
Run Code Online (Sandbox Code Playgroud)

Python具有相同内存地址的原因是什么?

python

6
推荐指数
3
解决办法
4233
查看次数