if not:和if False之间的区别:

时间:2019-05-22 13:07:45

标签: python boolean

我有一个可能很简单的问题,但是想知道这两个语句之间的区别:

if not os.path.isfile(file):
  #Do some stuff
if os.path.isfile(file) is False:
  #Do some stuff

两者之间有什么区别(如果有)?据我了解,它们都返回一个TrueFalse值,所以这仅仅是一个偏好问题还是有明显区别?

6 个答案:

答案 0 :(得分:3)

它们不是等效的。考虑以下示例,并尝试自己理解它:

x = None

if not(x):
    print("aa")

if x is False:
    print("bb")

此示例仅打印“ aa”。为什么?查看@milanbalazs的答案

答案 1 :(得分:1)

在您的情况下,由于我们知道os.path.isfile返回TrueFalse,所以没有区别。

通常,python中有很多对象,当将它们解释为布尔值时,它们的结果将为False

考虑一下:

empty_list = []
if not empty_list:
    print('List is not empty')
if empty_list is False:
    print('List is False')

在其他None""[]中,其值将为False

因此,通常首选使用not variable进行测试。

答案 2 :(得分:1)

在python(和其他动态语言)中,存在 truthy / falsy 值的概念。 True/False并非唯一被评估为真/假的东西

if not []: 
   print('this will be printed')

if [] is False:
   print('this won't)

另一个问题是,您应该比较x == False,而不要比较x is FalseFalse在当前的CPython实现中是一个单例对象,但这在规范中不能保证。

答案 3 :(得分:0)

您应该知道:False == 0 == Noneif条件下。如果使用if not,则可以覆盖所有版本的False(零值)。如果使用== False,则无法处理0或None。建议使用if notis运算符是一个不同的故事(is==不同),但是您可以阅读以下链接的更多详细信息:Understanding Python's "is" operator

答案 4 :(得分:0)

False只是整数0的关键字。在if if语句中,任何“ fasly”值将被评估为False,但是只有0False本身将被评估为is False

这是因为is检查匹配的身份,而if not检查隐式布尔值。

例如:

if not None

评估。

if None is False

没有。

答案 5 :(得分:0)

通常最好使用第一个,因为即使您没有在False是单例对象的Python实现中检查实际的布尔值,也可以使用第一个。
一致性好,可移植性也好。

>>> if 0 is False: print "false"
>>> if not 0: print "false"
false
>>> if [] is False: print "false"
>>> if not []: print "false"
false
>>> if "" is False: print "false"
>>> if not "": print "false"
false

它还可以防止此类事故的发生:

>>> False = 1
>>> True == False
True