一个方法比另一个更接近Pythonic?

Rah*_*rma 4 python

显然地

方法1

if var in ['string one', 'string two']:
    do_something()
Run Code Online (Sandbox Code Playgroud)

更像Pythonic比:

方法2

if var == 'stringone' or var == 'stringtwo':
    dosomething()
Run Code Online (Sandbox Code Playgroud)

为什么方法1被认为比方法2更像Pythonic?

Pet*_*bot 13

成为Pythonic就是使用Python构造和数据结构,使用干净,可读的习语.

来自:什么是Pythonic?

简而言之,第一个比第二个更容易阅读 - 它具有更少的样板,并且比第一个更少的开销.任何Python程序员都可以查看第一个,并看到有一个正在检查的事项列表,它读起来更像普通英语而不是第二个.考虑是否扩展了要检查的事物列表 - 第一个例子如下:

if var in ['string one', 'string two', 'string three']:
    # If var is one of string one, string two, or string three.
    do_something()
Run Code Online (Sandbox Code Playgroud)

而第二个听起来像:

if var == 'stringone' or var == 'stringtwo' or var == stringthree:
    # If var is equal to stringone, or var is equal to stringtwo, or var is equal to stringthree.
    dosomething()
Run Code Online (Sandbox Code Playgroud)


Bre*_*arn 5

将第一种方法扩展到更多字符串更容易:

if var in ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight']:
Run Code Online (Sandbox Code Playgroud)

第二种方法很快变得笨拙:

if  var == 'one' or var == 'two' or var == 'three' or ...:
Run Code Online (Sandbox Code Playgroud)

此外,第一种方法可用于测试函数调用的返回值,并且只评估一次:

if bigCalculation() in ['one', 'two', 'three']:
Run Code Online (Sandbox Code Playgroud)

第二种方法必须每次重新评估呼叫,导致更差的性能(特别是如果呼叫计算量很大).

if bigCalculation() == 'one' or bigCalculation() == 'two' or ...:
Run Code Online (Sandbox Code Playgroud)