42

这在 C 中很常见:像这样破解“空 if 语句”:

if(mostlyhappencondition)
    ;#empty statement
else{
    dosomething;
}

它在 Python 中工作?我的意思是,我们可以通过使用它来提高应用程序的性能吗?我也想知道为什么。

4

5 回答 5

51

如果“if”中没有 else 情况,则性能会有所提高,因为字节码不会将执行传递给“if”情况。

这是一些函数和输出dis.dis(foo)

以下示例应用程序:

def foo(x):
    if x:
        pass
    else:
        return x+2

拆解到:

5           0 LOAD_FAST                0 (x)
            3 POP_JUMP_IF_FALSE        9

6           6 JUMP_FORWARD             8 (to 17)

8     >>    9 LOAD_FAST                0 (x)
           12 LOAD_CONST               1 (2)
           15 BINARY_ADD          
           16 RETURN_VALUE        
      >>   17 LOAD_CONST               0 (None)
           20 RETURN_VALUE        

以下

def foo(x):
    if not x:
        return x+2

拆解到:

11           0 LOAD_FAST                0 (x)
             3 POP_JUMP_IF_TRUE        14

12           6 LOAD_FAST                0 (x)
             9 LOAD_CONST               1 (2)
            12 BINARY_ADD          
            13 RETURN_VALUE        
       >>   14 LOAD_CONST               0 (None)
于 2013-02-26T05:11:02.067 回答
25

我只能猜测您正在寻找该pass语句,有时需要创建一个空代码块以防止语法错误。

if mostlyhappencondition:
    pass
else:
    do_something()

这样做会更常见,这在逻辑上是等效的:

if not mostlyhappencondition:
    do_something()

这里没有显着的性能提升。

于 2013-02-26T04:48:56.457 回答
4

直到你没有任何事情if True:可以做

if not mostlyhappenedcondition:
   do something()

如果即使将来您也不必在“if”中添加任何内容,那么它在您的代码中是多余的。

于 2013-02-26T04:52:08.140 回答
3

不,这不会提高性能。事实上,它在 C 中也没有。你是从哪里听来的?

not/!读起来更好,应该有或多或少相同的速度。


并实际测试gcc -O4

#include <stdio.h>

int main(int argc, char *argv[]) {
    for(int i = 0; i < 1000000000; i++) {
        if(!(i < 900000000)) {
            putchar('.');
        }
    }
}

对比

#include <stdio.h>

int main(int argc, char *argv[]) {
    for(int i = 0; i < 1000000000; i++) {
        if(i < 900000000);
        else {
            putchar('.');
        }
    }
}

在我的电脑上,#1 用了 6.62 秒,#2 用了 6.64 秒。

于 2013-02-26T04:45:57.863 回答
-1

这个例子有一个列表

    myList = [1, 2, 4, 4, 1, 4, 2, 6, 2, 9]
    newList = []
        for element in myList:
            if element not in newList:
                newList.append(element)
                         or
                pass
            else:
                print("The list with unique elements only:")


   print(myList)
   print(newList)
于 2021-05-03T18:55:04.137 回答