Python“if x is not None”或“if not x is None”?

  • 问题:
  • 我一直认为如果不是x就没有版本更清晰,但是Google的style guide以及PEP-8如果x不是无,则两者都使用。是否有轻微的性能差异(我假设没有),是否有任何情况下其中一个确实不适合(使另一个成为我的大会的明显赢家)?*在

    *我指的是任何单例,而不仅仅是None

    …来比较单身汉

  • 答案:
  • 它们编译为相同的字节码,因此性能没有差别:

    Python 2.6.2 (r262:71600, Apr 15 2009, 07:20:39)
    >>> import dis
    >>> def f(x):
    ... return x is not None
    ...
    >>> dis.dis(f)
    2 0 LOAD_FAST 0 (x)
    3 LOAD_CONST 0 (None)
    6 COMPARE_OP 9 (is not)
    9 RETURN_VALUE
    >>> def g(x):
    ... return not x is None
    ...
    >>> dis.dis(g)
    2 0 LOAD_FAST 0 (x)
    3 LOAD_CONST 0 (None)
    6 COMPARE_OP 9 (is not)
    9 RETURN_VALUE

    在文体上,我尽量避免而不是x是y。尽管编译器总是将其视为not(x是y),但人类读者可能会将其误解为(而不是x)is y。如果我写下x不是y,那么就没有歧义