我一直认为if not x is None版本更清晰,但谷歌的风格指南和PEP-8都使用if x is not None. 是否存在任何细微的性能差异(我假设没有),是否有任何情况下一个真的不适合(使另一个明显成为我的大会的赢家)?*
if not x is None
if x is not None
*我指的是任何单身人士,而不仅仅是None.
None
…比较像 None 这样的单例。使用是或不是。
没有性能差异,因为它们编译为相同的字节码:
>>> import dis >>> dis.dis("not x is None") 1 0 LOAD_NAME 0 (x) 2 LOAD_CONST 0 (None) 4 COMPARE_OP 9 (is not) 6 RETURN_VALUE >>> dis.dis("x is not None") 1 0 LOAD_NAME 0 (x) 2 LOAD_CONST 0 (None) 4 COMPARE_OP 9 (is not) 6 RETURN_VALUE
在风格上,我尽量避免not x is y,人类读者可能会将其误解为(not x) is y. 如果我写x is not y,那么就没有歧义。
not x is y
(not x) is y
x is not y