'not=='和''之间是否存在逻辑差异!=(无is)

2024-06-02 11:22:47 发布

您现在位置:Python中文网/ 问答频道 /正文

Python3.x在以下方面是否存在实质性差异:

for each_line in data_file:
    if each_line.find(":") != -1:
        #placeholder for code
        #more placeholder

以及

^{pr2}$

我的问题并不是针对上述用法,而是更一般或更重要的问题——即使结果相同,这种句法差异是否以不同的方式起作用?有逻辑上的区别吗?是否有更合适的任务,或者这仅仅是风格上的差异?如果这仅仅是一种风格,那么Python程序员认为哪一种更简洁?在

同样,上面的问题是否是相反的例子,询问is和{}之间的区别?前者和后者一样,是对象同一性和对象价值相等的区别吗?我的意思是,在我上面的例子中,使用not时的is是隐式的吗?在


Tags: 对象infordatais风格line差异
3条回答

据我所知, 从功能上讲,它们并不完全相同;如果你在与一个类进行比较,那么这个类可能有一个成员函数,__ne__,这是在使用比较运算符时调用的!=,与使用比较==时调用的__eq__相反

因此,在本例中,
not (a == b)将调用a上的__eq__,以b作为参数,然后not结果
(a != b)将调用a上的__ne__,参数为b。在

我会使用第一种方法(使用!=)用于比较

第一个例子是如何测试find的结果。在

你的第二个例子是做得太多了。它还对each_line.find(":") == -1表达式的结果执行boolean ^{}。在

在这种情况下,您想要使用not的地方是当您有可以测试真伪的东西时。
例如,空字符串''的计算结果为False:

s = ''
if not s:
    print('s is the empty string')

您似乎将标识测试表达式is和{}与布尔not相混淆。在

关于如何执行身份测试的示例:

^{pr2}$

调用不同的rich comparison方法取决于您使用的是==还是{}。在

class EqTest(object):
    def __eq__(self, other):
        print "eq"
        return True
    def __ne__(self, other):
        print "ne"
        return False

a = EqTest()
b = EqTest()

print not (a == b)
# eq
# False
print a != b
# ne
# False

据我所知,对于所有内置类型,您将得到相同的结果,但理论上,对于某些用户定义的对象,它们可能有不同的实现。在

我将使用!=而不是not和{},因为这是一个操作而不是两个操作。在

相关问题 更多 >