Python ';非==';和';!=(无is)
在Python 3.x中,以下各项之间是否存在实质性差异:Python ';非==';和';!=(无is),python,syntax,boolean-expression,Python,Syntax,Boolean Expression,在Python 3.x中,以下各项之间是否存在实质性差异: for each_line in data_file: if each_line.find(":") != -1: #placeholder for code #more placeholder 及 我的问题不是针对上述用法的,而是更一般或更重要的——即使结果相同,这种句法差异是否以不同的方式发挥作用?有逻辑上的区别吗?是否有更合适的任务,或者这仅仅是风格上的差异?如果这仅仅是一种风格,那么Py
for each_line in data_file:
if each_line.find(":") != -1:
#placeholder for code
#more placeholder
及
我的问题不是针对上述用法的,而是更一般或更重要的——即使结果相同,这种句法差异是否以不同的方式发挥作用?有逻辑上的区别吗?是否有更合适的任务,或者这仅仅是风格上的差异?如果这仅仅是一种风格,那么Python程序员认为哪一种更干净
此外,上面的问题是否是询问
is
和==
之间的区别的相反例子?前者和后者一样,是对象同一性和对象价值平等性的差异吗?我的意思是,在我上面的例子中,使用时的是而不是隐式的?你的第一个例子是你应该如何测试find
的结果
你的第二个例子做得太多了。它还对每一行的结果执行一次运算。find(“:”==-1
表达式
在这种情况下,您想使用而不是的地方是当您有可以测试真假的东西时。
例如,空字符串'
的计算结果为False:
s = ''
if not s:
print('s is the empty string')
您似乎将身份测试表达式is
和is not
与布尔值not
混为一谈
您将如何执行身份测试的示例:
result_of_comparison = each_line.find(":") == -1
if result_of_comparison is False: # alternatively: is not True
pass
据我所知,
它们在功能上并不完全相同;如果要与类进行比较,则该类可能有一个成员函数,\uuu ne\uu
,在使用比较运算符时调用该函数!=,与使用比较时调用的相反==
因此,在本例中,
not(a==b)
将调用a上的\uuuuueq\uuuu
,b作为参数,然后not
结果
(a!=b)
将调用a上的\uuu ne\uu
,b作为参数
我将使用第一种方法(使用!=)进行比较根据您是使用=
还是调用不同的方法=代码>
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
据我所知,所有内置类型都会得到相同的结果,但理论上,对于某些用户定义的对象,它们可能有不同的实现
我会使用=
而不是而不是和=
,因为这是一个操作而不是两个操作。谢谢,这对我来说非常有意义,它回答了逻辑问题。谢谢,这帮助我理解了实际操作和风格上的差异。
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