Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ';非==';和';!=(无is)_Python_Syntax_Boolean Expression - Fatal编程技术网

Python ';非==';和';!=(无is)

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

在Python 3.x中,以下各项之间是否存在实质性差异:

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