求大佬解答:无意发现is not True和is False貌似有区别。
本帖最后由 曼查克 于 2020-7-1 15:37 编辑代码如下:
import os
import cv2
import numpy as ny
os.chdir(r"D:\test")
img1 = cv2.imread(r"D:\test\581_4_Q204@3_side.jpeg")
img2 = cv2.imread(r"D:\test\581_4_Q204@3_side(2).jpeg")
print(img1.shape,img2.shape)
img3 = cv2.subtract(img1,img2)
if ny.any(img3) is not True:
print(img3.shape)
这样可以正常运行,结果如下:
=============== RESTART: C:\Users\Administrator\Desktop\ig (2).py ==============
(640, 587, 3) (640, 587, 3)
(640, 587, 3)
>>>
但是如果把if条件改成这样:
import os
import cv2
import numpy as ny
os.chdir(r"D:\test")
img1 = cv2.imread(r"D:\test\581_4_Q204@3_side.jpeg")
img2 = cv2.imread(r"D:\test\581_4_Q204@3_side(2).jpeg")
print(img1.shape,img2.shape)
img3 = cv2.subtract(img1,img2)
if ny.any(img3) is False:
print(img3.shape)
结果就不是想要的了,如下:
=============== RESTART: C:\Users\Administrator\Desktop\ig (2).py ==============
(640, 587, 3) (640, 587, 3)
>>>
求大佬解答{:7_132:} 把 is 和 is not
换成 == 和 != 试一下 "p is false" implies "p is not true", but not vice verse because p can also be nonsense 本帖最后由 yhhpf 于 2020-7-1 16:22 编辑
>>> None is False
False
>>> None is True
False
>>> None is not True
True
没有真假的东西,你判断他“不是真”时,那“不是真”这个判断就是真了; 本帖最后由 hrp 于 2020-7-1 17:54 编辑
你对is的用法理解有偏差,首先is和is not是对对象“身份”的判断,而不是进行“真/假”的判断。其次你第一段代码应该理解为(is not) True,而不是is (not True)。
综上所述,问题点就很明显了。
第一段代码中:无论ny.any(img3)是空或者非空,它的身份就是ny.any(img3),它不叫True也不叫False,所以if ny.any(img3) is not(身份不是) True,条件是成立的(误打误撞),顺利执行(ny.any(img3)是空的也会执行,仍然有问题)。
我猜测你应该是想判断ny.any(img3)非空时打印结果,py中进行条件判断时非空会被认为判断结果是True(不是身份判断),所以可以这样写:if ny.any(img3): print()。
相反,想判断ny.any(img3)是空则执行,可以这样写:if not ny.any(img3): print('empty') hrp 发表于 2020-7-1 17:53
你对is的用法理解有偏差,首先is和is not是对对象“身份”的判断,而不是进行“真/假”的判断。其次你第一 ...
我来复述一下,ny.any(img3) is not True 和 is not False都是成立的,但是 is False 和 is True 都是错的。
因为这个对象的“身份”既不是True,也不是False。
换句话说,空是假的,但不是False,非空是真的,却不是True。
应该是这样吧,感谢大佬的解答,详尽且易解。
{:7_123:}
曼查克 发表于 2020-7-1 18:38
我来复述一下,ny.any(img3) is not True 和 is not False都是成立的,但是 is False 和 is True 都是错 ...
不能说is False和is True是错的,它没错,只能说是用错了地方,在这里它们作为两个条件都返回了False{:10_250:}
ny.any(img3) is not True 和 is not False都是成立的==>两个都返回True
ny.any(img3) is False 和 is True 都是不成立的==>两个都返回False。
都是咬文嚼字的小问题{:10_250:}
页:
[1]