括号对Python中的'或'运算符有什么影响?

sta*_*rob 4 python

python中这两个语句之间有区别吗:

if tag == ('/event' or '/organization' or '/business'):
Run Code Online (Sandbox Code Playgroud)

if tag == '/event' or '/organization' or '/business':
Run Code Online (Sandbox Code Playgroud)

int*_*jay 12

他们都错了.你需要的是:

if tag == '/event' or tag == '/organization' or tag == '/business':
Run Code Online (Sandbox Code Playgroud)

要么:

if tag in ['/event', '/organization', '/business']:
Run Code Online (Sandbox Code Playgroud)

  • 用元组替换该列表. (6认同)
  • 列表和元组是__exactly__相同,只是区别是列表是可变的(它可以改变)而元组是不可变的(它不能改变).在性能和士气方面,元组都适合这里. (3认同)
  • @interjay:谈论性能一个元组占用的内存少于列表,而在我的常识中,当我希望我的数据不可变时,我使用元组,否则我使用list.但如果性能真的是一个问题(这不是在这个例子:) :)我们应该使用__set__不要我们:) (3认同)

Thi*_*ter 12

适当的解决方案是

if tag in ('/event', '/organization', '/business'):
Run Code Online (Sandbox Code Playgroud)

它不仅使用in完美的操作符,而且还使用元组(不可变),因此python解释器可以比(可变)列表更好地优化它.

基准显示元组比列表更快:

In [1]: import timeit
In [2]: t1 = timeit.Timer('"b" in ("a", "b", "c")')
In [3]: t2 = timeit.Timer('"b" in ["a", "b", "c"]')

In [4]: t1.timeit(number=10000000)
Out[4]: 0.7639172077178955

In [5]: t2.timeit(number=10000000)
Out[5]: 2.240161895751953
Run Code Online (Sandbox Code Playgroud)

  • 将`in`的速度与元组和列表隔离时,时间几乎相同:`>>> t1 = timeit.Timer("f'中的'b',setup ="foo =('a','b', 'c')")>>> t1.timeit(number = 10000000)0.4698009490966797 >>> t2 = timeit.Timer("foo中的'b'",setup ="foo = ['a','b',' c']")>>> t2.timeit(number = 10000000)0.46918296813964844` (2认同)