복붙노트

[PYTHON] if-return-return 또는 if-else-return을 사용하는 것이 더 효율적입니까?

PYTHON

if-return-return 또는 if-else-return을 사용하는 것이 더 효율적입니까?

if 문에 return이 있다고 가정합니다. 효율성 관점에서 볼 때, 나는 사용해야 만한다.

if(A > B):
    return A+1
return A-1

또는

if(A > B):
    return A+1
else:
    return A-1

컴파일 된 언어 (C) 또는 스크립팅 된 언어 (Python)를 사용할 때 둘 중 하나를 선호해야합니까?

해결법

  1. ==============================

    1.return 문은 현재 함수의 실행을 종료하므로 두 형식은 동일하지만 (두 번째 형식은 첫 번째 형식보다 더 읽기 쉽습니다).

    return 문은 현재 함수의 실행을 종료하므로 두 형식은 동일하지만 (두 번째 형식은 첫 번째 형식보다 더 읽기 쉽습니다).

    두 형식의 효율성은 비슷합니다. 기본 기계 코드는 if 조건이 어쨌든 거짓이면 점프를 수행해야합니다.

    파이썬은 다음과 같은 경우에 하나의 return 문만 사용할 수있는 구문을 지원합니다.

    return A+1 if A > B else A-1
    
  2. ==============================

    2.Chromium의 스타일 가이드 :

    Chromium의 스타일 가이드 :

    반환 후에는 else를 사용하지 마십시오.

    # Bad
    if (foo)
      return 1
    else
      return 2
    
    # Good
    if (foo)
      return 1
    return 2
    
    return 1 if foo else 2
    
  3. ==============================

    3.합리적인 컴파일러를 사용하면 아무런 차이가 없어야합니다. 동일한 기계 코드로 컴파일해야합니다.

    합리적인 컴파일러를 사용하면 아무런 차이가 없어야합니다. 동일한 기계 코드로 컴파일해야합니다.

  4. ==============================

    4.코딩 스타일에 관하여 :

    코딩 스타일에 관하여 :

    언어에 관계없이 대부분의 코딩 표준은 나쁜 기능으로 단일 기능에서 여러 return 문을 금지합니다.

    (비록 개인적으로 여러 return 문이 이해되는 몇 가지 경우가 있습니다 : 텍스트 / 데이터 프로토콜 파서, 광범위한 오류 처리 기능 등)

    모든 업계 코딩 표준의 합의는 표현이 다음과 같이 작성되어야한다는 것입니다.

    int result;
    
    if(A > B)
    {
      result = A+1;
    }
    else
    {
      result = A-1;
    }
    return result;
    

    효율성에 관하여 :

    위의 예와이 질문의 두 예는 모두 효율성면에서 완전히 동등합니다. 이 모든 경우의 기계 코드는 A> B를 비교 한 다음 A + 1 또는 A-1 계산으로 분기 한 다음 그 결과를 CPU 레지스터 나 스택에 저장해야합니다.

    편집하다 :

    출처 :

  5. ==============================

    5.버전 A는 더 간단하고 그 이유는 그것을 사용하는 것입니다.

    버전 A는 더 간단하고 그 이유는 그것을 사용하는 것입니다.

    Java에서 모든 컴파일러 경고를 켜면 불필요하고 코드 복잡성이 나타나기 때문에 두 번째 버전에 대한 경고가 표시됩니다.

  6. ==============================

    6.나는 항상 다음을 사용합니다.

    나는 항상 다음을 사용합니다.

    return A+1 if (A > B) else A-1
    

    함수에서 마지막 문장으로 하나의 return 문을 사용하는 좋은 규칙과 명령형 중간 결과를 피할 수있는 좋은 함수 프로그래밍 패러다임에 모두 복종합니다. 좀 더 복잡한 함수의 경우에는 rval이라는 명령형 변수를 사용합니다. 필자는 함수를 여러 하위 함수로 나누어 필요한 경우 여러 개의 return 문을 사용하지 않고 이것을 사용하지 않습니다. 필자는 효율성에 대한 문제를 전혀 고려하지 않습니다. 효율성에 대한 문제는 저에게 중요한 코딩의 효율성 (즉, 오류가없는 코드 작성)입니다.

  7. ==============================

    7.나는 질문에 파이썬 태그가 붙어 있지만 동적 언어를 언급하므로 루비에서 if 문이 실제로 리턴 타입을 가지고 있다고 언급해야한다고 생각했다. 그래서 당신은 뭔가를 할 수있다.

    나는 질문에 파이썬 태그가 붙어 있지만 동적 언어를 언급하므로 루비에서 if 문이 실제로 리턴 타입을 가지고 있다고 언급해야한다고 생각했다. 그래서 당신은 뭔가를 할 수있다.

    def foo
      rv = if (A > B)
             A+1
           else
             A-1
           end
      return rv 
    end
    

    또는 암묵적으로 반환되기 때문에

    def foo 
      if (A>B)
        A+1
      else 
        A-1
      end
    end
    

    여러 개의 리턴을 가지지 않는 스타일 문제를 해결합니다.

  8. from https://stackoverflow.com/questions/9191388/it-is-more-efficient-to-use-if-return-return-or-if-else-return by cc-by-sa and MIT license