[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)를 사용할 때 서로 선호해야합니까?



답변

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

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

파이썬은 return당신의 경우에 하나의 문장 만 사용할 수있는 문법을 지원합니다 :

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


답변

에서 크롬의 스타일 가이드 :

반품 후 다른 것을 사용하지 마십시오 :

# Bad
if (foo)
  return 1
else
  return 2

# Good
if (foo)
  return 1
return 2

return 1 if foo else 2


답변

코딩 스타일과 관련하여 :

언어에 관계없이 대부분의 코딩 표준은 단일 함수에서 여러 개의 리턴 문을 나쁜 습관으로 금지합니다.

(개인적으로는 여러 반환 문이 의미가있는 몇 가지 경우가 있다고 말하고 싶습니다 : 텍스트 / 데이터 프로토콜 파서, 광범위한 오류 처리 기능 등)

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

int result;

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

효율성과 관련하여 :

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

편집하다 :

출처 :

  • MISRA-C : 2004 규칙 14.7, 차례로 인용 :
  • IEC 61508-3. 3 부, 표 B.9.
  • IEC 61508-7. C.2.9.

답변

합리적인 컴파일러라면 차이가 없어야합니다. 그것들은 동등한 머신 코드로 컴파일되어야합니다.


답변

통역사가 신경 쓰지 않기 때문에 이것은 스타일 (또는 선호도)의 문제입니다. 개인적으로 함수 기반 이외의 들여 쓰기 수준에서 값을 반환하는 함수의 최종 진술을 만들려고하지 않습니다. 예제 1의 else는 함수의 끝이 약간만있는 경우 모호합니다.

선호에 따라 다음을 사용합니다.

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

함수에서 마지막 명령문으로 단일 리턴 명령문을 갖는 좋은 규칙 (이미 언급 한 바와 같이)과 필수 스타일 중간 결과를 피하는 좋은 기능적 프로그래밍 패러다임 모두를 준수합니다.

더 복잡한 함수의 경우 가능한 경우 조기 리턴을 피하기 위해 함수를 여러 하위 함수로 나누는 것을 선호합니다. 그렇지 않으면 rval이라는 명령형 스타일 변수를 사용하여 되돌립니다. 함수가 사소하거나 끝 전에 return 문이 오류의 결과가 아닌 한 여러 return 문을 사용하지 마십시오. 일찍 돌아 오면 계속할 수 없다는 사실이 강조됩니다. 여러 하위 함수로 분기되도록 설계된 복잡한 함수의 경우 함수를 사례 문으로 코딩하려고합니다 (예를 들어 dict에 의해 구동 됨).

일부 포스터는 작동 속도를 언급했습니다. 실행 속도가 필요한 경우 Python이 사용하기 가장 좋은 언어가 아니기 때문에 런타임 속도는 나에게 부차적입니다. 나는 파이썬을 나에게 중요한 코딩 효율 (즉 오류없는 코드 작성)로 사용한다.


답변

else가능한 경우 개인적으로 블록을 피 합니다. 참고 항목 안티 경우 캠페인

또한 그들은 회선에 대해 ‘추가’를 청구하지 않습니다.

“단순한 것이 복잡한 것보다 낫다” & “가독성은 왕이다”

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


답변

버전 A가 더 간단하므로 사용하려고합니다.

그리고 Java에서 모든 컴파일러 경고를 켜면 두 번째 버전이 불필요하고 코드 복잡성이 높아져 두 번째 버전에 경고가 표시됩니다.