我已经看到了两种方式,但哪种方式更 Pythonic?
a = [1, 2, 3]
# version 1
if not 4 in a:
print 'is the not more pythonic?'
# version 2
if 4 not in a:
print 'this haz more engrish'
哪种方式会被认为是更好的 Python?
我已经看到了两种方式,但哪种方式更 Pythonic?
a = [1, 2, 3]
# version 1
if not 4 in a:
print 'is the not more pythonic?'
# version 2
if 4 not in a:
print 'this haz more engrish'
哪种方式会被认为是更好的 Python?
第二个选项更 Pythonic 有两个原因:
它是一个运算符,转换为一个字节码操作数。另一行是真的not (4 in a)
;两个运算符。
碰巧的是,Python优化了后一种情况并转换not (x in y)
为x not in y
无论如何,但这是 CPython 编译器的实现细节。
大多数人会同意这4 not in a
更像是 Pythonic。
Python 的设计目的是易于理解和理解,4 not in a
听起来更像你用英语所说的 - 你可能不需要了解 Python 来理解它的含义!
请注意,就字节码而言,两者在 CPython 中是相同的(虽然not in
在技术上是单个运算符,not 4 in a
但需要优化):
>>> import dis
>>> def test1(a, n):
not n in a
>>> def test2(a, n):
n not in a
>>> dis.dis(test1)
2 0 LOAD_FAST 1 (n)
3 LOAD_FAST 0 (a)
6 COMPARE_OP 7 (not in)
9 POP_TOP
10 LOAD_CONST 0 (None)
13 RETURN_VALUE
>>> dis.dis(test2)
2 0 LOAD_FAST 1 (n)
3 LOAD_FAST 0 (a)
6 COMPARE_OP 7 (not in)
9 POP_TOP
10 LOAD_CONST 0 (None)
13 RETURN_VALUE
虽然4 not in a
在单独做出选择时是首选,但在某些情况下not 4 in a
可能会首选其他选择。
例如,如果软件的规范是为匹配而编写的,not 4 in a
那么最好让它与规范保持一致,以帮助检查软件是否符合规范。
另一个例子是,一种方式允许这种恶化的健康表达:
( 4 in well,
well,
not well,
not 4 in well) #!