Python에서 'empty if statement'는 어떨까요?


Answers

바이트 코드가 "if"경우에 실행을 전달하지 않기 때문에 "if"에 else case가 없으면 성능이 향상됩니다.

여기에 몇 가지 함수와 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)
Question

C에서 매우 일반적입니다 : 'if if if empty'문을 해킹합니다.

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

그것은 파이썬에서 작동합니까? 내 말은, 우리는 그것을 사용하여 응용 프로그램의 성능을 향상시킬 수 있습니까? 나는 또한 이유를 알고 싶다.




아니, 성능이 향상되지 않습니다. 사실 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 초 걸렸습니다.




if True:if True: 당신은 할 수있는 시간까지 if True: 당신은 할 수 있어요.

if not mostlyhappenedcondition:
   do something()

앞으로도 "if"에 어떤 것을 넣지 않아도된다면 코드에서 중복됩니다.




pass 문을 찾고 있다고 생각할 수 있습니다. 문법 오류를 방지하기 위해 빈 코드 블록을 작성해야하는 경우가 있습니다.

if mostlyhappencondition:
    pass
else:
    do_something()

논리적으로 동등한이 작업을 수행하는 것이 훨씬 더 일반적입니다.

if not mostlyhappencondition:
    do_something()

여기에 상당한 성능 향상은 없습니다.