相关疑难解决方法(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!=操作vs"不是"

在对这个问题的评论中,我看到了一个建议使用的声明

result is not None
Run Code Online (Sandbox Code Playgroud)

VS

result != None
Run Code Online (Sandbox Code Playgroud)

我想知道区别是什么,以及为什么可能推荐另一个?

python operators

223
推荐指数
5
解决办法
16万
查看次数

Python中"a is b"和"id(a)== id(b)"有什么区别?

id()内置功能使...

一个整数(或长整数),保证在该生命周期内该对象是唯一且常量的.

is操作,相反,给...

对象身份

那么,为什么有可能有具有相同的两个对象id,但返回Falseis检查?这是一个例子:

>>> class Test():
...   def test():
...     pass
>>> a = Test()
>>> b = Test()
>>> id(a.test) == id(b.test)
True
>>> a.test is b.test
False
Run Code Online (Sandbox Code Playgroud)

一个更令人不安的例子:(继续上述)

>>> b = a
>>> b is a
True
>>> b.test is a.test
False
>>> a.test is a.test
False
Run Code Online (Sandbox Code Playgroud)

然而:

>>> new_improved_test_method = lambda: None
>>> a.test = new_improved_test_method
>>> a.test is a.test
True
Run Code Online (Sandbox Code Playgroud)

python identity

34
推荐指数
1
解决办法
2216
查看次数

Python:!=和"不是"之间的区别

我不清楚语法!=和语法之间的区别is not.他们似乎做了同样的事情:

>>> s = 'a'
>>> s != 'a'
False
>>> s is not 'a'
False
Run Code Online (Sandbox Code Playgroud)

但是,当我is not在列表理解中使用时,它会产生与我使用时不同的结果!=.

>>> s = "hello"
>>> [c for c in s if c is not 'o']
['h', 'e', 'l', 'l', 'o']
>>> [c for c in s if c != 'o']
['h', 'e', 'l', 'l']
Run Code Online (Sandbox Code Playgroud)

为什么oget包含在第一个列表中,而不是第二个列表?

python syntax list-comprehension

11
推荐指数
2
解决办法
8325
查看次数

"是"运算符在Python中做了什么?

我(可能是错误的)认为is运算符正在进行id()比较.

>>> x = 10
>>> y = 10
>>> id(x)
1815480092
>>> id(y)
1815480092
>>> x is y
True
Run Code Online (Sandbox Code Playgroud)

然而,val is not None看起来它并不那么简单.

>>> id(not None)
2001680
>>> id(None)
2053536
>>> val = 10
>>> id(val)
1815480092
>>> val is not None
True
Run Code Online (Sandbox Code Playgroud)

然后,'是'运营商做了什么?它只是我推测的对象id比较吗?如果是这样,val is not None在Python中被解释为not (val is None)

python operators

7
推荐指数
1
解决办法
2710
查看次数

Python“is not True”与“is False”相同吗?

我很好奇Python中“x is not True”的优先级。起初,我认为它意味着“!= True”,但后来我认为“not True”肯定比“is not”具有更高的优先级。然而,以下内容似乎表明了后者:

>>> 4 is not True    
True    
>>> not True    
False     
>>> 4 is False     
False     
>>> 4 is (not True)
False
Run Code Online (Sandbox Code Playgroud)

看来Python将“is not True”解释为单个表达式,而不是相当于“is False”的“is (not True)”。

我对Python编程并不陌生,但之前也没有深入思考过这个问题。我可以安全地假设“is not”本身就是一个具有比“not True”更高的解析优先级的运算符吗?

python logical-operators

-1
推荐指数
2
解决办法
5437
查看次数