首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"None not in“vs "not None in”

"None not in“vs "not None in”
EN

Stack Overflow用户
提问于 2010-08-31 05:05:16
回答 2查看 1.2K关注 0票数 7

除非我疯了,否则if None not in xif not None in x是等同的。有没有首选的版本?我猜None not in更像英语,因此更有pythonic风格,但not None in更像其他语言的语法。有没有首选的版本?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-31 05:09:33

它们编译成相同的字节码,所以它们是等价的。

代码语言:javascript
复制
>>> import dis
>>> dis.dis(lambda: None not in x)
  1           0 LOAD_CONST               0 (None)
              3 LOAD_GLOBAL              1 (x)
              6 COMPARE_OP               7 (not in)
              9 RETURN_VALUE
>>> dis.dis(lambda: not None in x)
  1           0 LOAD_CONST               0 (None)
              3 LOAD_GLOBAL              1 (x)
              6 COMPARE_OP               7 (not in)
              9 RETURN_VALUE

documentation还明确指出,这两者是等价的:

x not in s返回x in s的否定。

正如你提到的,None not in x是更自然的英语,所以我更喜欢用这个。

如果您编写not y in x,可能不清楚您指的是not (y in x)还是(not y) in x。如果您使用not in,就不会有歧义。

票数 14
EN

Stack Overflow用户

发布于 2010-08-31 05:14:32

表达式

代码语言:javascript
复制
not (None in x) 

(为清楚起见,添加了括号)是一个普通的布尔否定。然而,

代码语言:javascript
复制
None not in x

是否添加了特殊的语法以提高代码的可读性(这里没有可能,也没有任何意义,在in前面使用和、或等)。如果添加了此特殊情况,请使用它。

同样的情况也适用于

代码语言:javascript
复制
foo is not None

代码语言:javascript
复制
not foo is None

我发现“并不是”读起来更清楚。额外的好处是,如果表达式是更大的布尔表达式的一部分,not的作用域就会立即变得清晰。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3604222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档