我有一些代码,我正在编辑,使它更容易理解,我认为我应该把char=="|"
改成{}。我知道看起来我把它弄得太慢了,但看起来确实更好。无论如何,我最后一次决定pycheck
,我得到了这个警告:
Warnings...
test.py:7: Using is |, may not always work
Processing module test (test.py)...
在我的一生中,我无法想象"|" is "|"
会返回{},除非你开始尝试多字节字符编码、CJK字符等,如果我没有错的话。我错过了其他的情况吗?
Tags:
我把这里的问题解释为“我实际上在哪里使用‘is’来检查东西?”。在
“is”检查通常用于函数的默认命名参数为None,并且您希望查看函数是否被赋予了某些内容。没有总是没有。如果它们给出0或[]或“”,则这些值将作为布尔值计算为False。在
退货
^{pr2}$因此,如果函数的用户希望函数像通常那样处理这样的参数,那么检查变量的bool并不能给您提供所需的行为。None就像一个sentinel来检查函数是否得到了有意提供的参数。当您将变量分配给可变的空容器对象时,此检查特别有用。在
例如:
^{3}$所以
和检查一样
如果计算结果为True,则它们是相同的对象,因为它们都指向内存中的相同位置。正如其他人所指出的,不要使用is来检查相等性,因为实现可能会有所不同,而且从语义上讲,您不关心它是否是同一个对象,而是关心这两个项是否相等。在
==
将检查两边的值是否相等,但是is
将检查两个变量是否指向同一个引用。所以,它们的目的完全不同。例如在我的机器上输出
^{pr2}$由于}指向相同的字符串数据(字符串在Python中是不可变的),Python会优化以使用相同的对象。这就是为什么}都返回{}。其中as
^{3}$a
和{is
和{在我的机器上输出
尽管}具有相同的数据(相等),但在内存中,它们存储在不同的位置(不同的引用或两个不同的对象)。在
a
和{所以,永远不要使用
is
运算符来检查是否相等。在CPython中,所有的单字符字符串都是内联的,对于同一个字符串(character)应该始终具有相同的id
这只是一个实现细节,不应该依赖它。在
在一些地方,您可能希望检查两个字符串的标识是否相同,但您的用例不是其中之一
相关问题 更多 >
编程相关推荐