python 中 "if x is not None" 和 "if not x is None" 有什么区别?
伊谢尔伦
伊谢尔伦 2017-04-17 13:36:45
0
6
947

google 的 python 风格指南中这么说:

Beware of writingif x:when you really meanif x is not None:—e.g., when testing whether a variable or argument that defaults to None was set to some other value. The other value might be a value that's false in a boolean context!

也就是说,推荐使用if x is not None进行判断,but why?

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

reply all (6)
Ty80

内容和标题不符,if xif not x is None是不一样的。

if x会对x做 __nonzero__ 判断,当 x 为 ''(空字符串),{}(空字典), 0 的时候都是 False。当你确实要判断一个变量不是 None 的时候,应该用if x is not None

至于if not x is Noneif x is not None是一样的,选一个你读的顺的就好。

    刘奇

    前者更接近白话文,而后者有可能使读者误解为if (not x) is None.

      黄舟

      首先,直接查看操作码(XP+Python3.4)。
      x is not None的操作码:

      dis.dis('if x is not None: pass') 0 LOAD_NAME 0 (x) 3 LOAD_CONST 0 (None) 6 COMPARE_OP 9 (is not) 9 POP_JUMP_IF_FALSE 15 12 JUMP_FORWARD 0 (to 15) >> 15 LOAD_CONST 0 (None) 18 RETURN_VALUE

      if not x is None的操作码:

      dis.dis('if not x is None: pass') 0 LOAD_NAME 0 (x) 3 LOAD_CONST 0 (None) 6 COMPARE_OP 9 (is not) 9 POP_JUMP_IF_FALSE 15 12 JUMP_FORWARD 0 (to 15) >> 15 LOAD_CONST 0 (None) 18 RETURN_VALUE

      可以看到,操作码是一样的!
      题主还可以测试后面加or或者and的情况。

      个人意见,if x is not Noneif not x is None更加易读,毕竟英语当中有一个isn't呢。

        PHPzhong

        if not x is Noneif x is not None對計算機而言是一樣的。對人類而言是不一樣的。

        前者的隱含意義是x本該是None結果不是,後者是x不該是None結果也不是。個人感覺,無客觀依據(好像沒有人做這樣的心理實驗?)。

          洪涛

          前者更pythonic

            洪涛

            假如原本你的xNone
            你要执行如下代码判断x是否已经发生改变,仍为None

            x = False if x: print 'yes' else: print 'no'

            你得到会是no,其实x已经被改变了,但仍然是False

            if not x is Noneif x is not None结果是一样的。

            if not x is None=>if not (x is None)
            if x is not None=>if x (is not) None

              Latest Downloads
              More>
              Web Effects
              Website Source Code
              Website Materials
              Front End Template
              About us Disclaimer Sitemap
              php.cn:Public welfare online PHP training,Help PHP learners grow quickly!