에 if
문 이 있다고 가정 합니다 return
. 효율성 관점에서 사용해야합니까
if(A > B):
return A+1
return A-1
또는
if(A > B):
return A+1
else:
return A-1
컴파일 언어 (C) 또는 스크립트 언어 (Python)를 사용할 때 서로 선호해야합니까?
에 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
return (A>B)?A+1:A-1;
그러나 이와 같은 코드를 작성하면 성능 이 전혀 향상되지 않습니다 . 우리가 달성 한 것은 코드를 난독 화하고 읽을 수 없으며 경우에 따라 암시 적 유형 프로모션에 더 취약하게 만드는 것입니다.
<
하기 때문에 나쁜 습관 -1 < 1u
입니다.
-1 < 1u
의심 할 여지없이 쉽게 버그를 발견 할 것입니다. 그러나 많은 사람들이 내가 게시 한 코드 버전을 작성합니다. 프로덕션 코드에서? : 연산자를 신뢰하기 위해 그러한 버그를 너무 자주 보았습니다. 또한 일반적으로 언어가 동일한 작업을 수행하는 두 가지 방법을 제공하는 경우 둘 중 하나만 사용하고 기분에 따라 두 가지 중 하나를 임의로 선택하지 마십시오.
에서 크롬의 스타일 가이드 :
반품 후 다른 것을 사용하지 마십시오 :
# Bad
if (foo)
return 1
else
return 2
# Good
if (foo)
return 1
return 2
return 1 if foo else 2
if-else-return
브랜치가 거의 동일하지 않다는 것을 알 수 있습니다 (그렇다면 switch
구성을 사용하거나 파이썬을 사용하여 dict를 열거하거나 callable 등을 사용하여 리팩토링해야 합니다). 따라서 거의 모든 if-else-return
가드 절의 경우이며 else
.
코딩 스타일과 관련하여 :
언어에 관계없이 대부분의 코딩 표준은 단일 함수에서 여러 개의 리턴 문을 나쁜 습관으로 금지합니다.
(개인적으로는 여러 반환 문이 의미가있는 몇 가지 경우가 있다고 말하고 싶습니다 : 텍스트 / 데이터 프로토콜 파서, 광범위한 오류 처리 기능 등)
모든 업계 코딩 표준의 합의는 다음과 같이 표현을 작성해야한다는 것입니다.
int result;
if(A > B)
{
result = A+1;
}
else
{
result = A-1;
}
return result;
효율성과 관련하여 :
문제의 위 예와 두 가지 예는 모두 효율성 측면에서 완전히 동일 합니다. 이러한 모든 경우의 머신 코드는 A> B를 비교 한 다음 A + 1 또는 A-1 계산으로 분기 한 다음 그 결과를 CPU 레지스터 또는 스택에 저장해야합니다.
편집하다 :
출처 :
return
곳 분명히 할 일이 파이썬에서 그것을 할 수있는 관용적 인 방법입니다.
통역사가 신경 쓰지 않기 때문에 이것은 스타일 (또는 선호도)의 문제입니다. 개인적으로 함수 기반 이외의 들여 쓰기 수준에서 값을 반환하는 함수의 최종 진술을 만들려고하지 않습니다. 예제 1의 else는 함수의 끝이 약간만있는 경우 모호합니다.
선호에 따라 다음을 사용합니다.
return A+1 if (A > B) else A-1
함수에서 마지막 명령문으로 단일 리턴 명령문을 갖는 좋은 규칙 (이미 언급 한 바와 같이)과 필수 스타일 중간 결과를 피하는 좋은 기능적 프로그래밍 패러다임 모두를 준수합니다.
더 복잡한 함수의 경우 가능한 경우 조기 리턴을 피하기 위해 함수를 여러 하위 함수로 나누는 것을 선호합니다. 그렇지 않으면 rval이라는 명령형 스타일 변수를 사용하여 되돌립니다. 함수가 사소하거나 끝 전에 return 문이 오류의 결과가 아닌 한 여러 return 문을 사용하지 마십시오. 일찍 돌아 오면 계속할 수 없다는 사실이 강조됩니다. 여러 하위 함수로 분기되도록 설계된 복잡한 함수의 경우 함수를 사례 문으로 코딩하려고합니다 (예를 들어 dict에 의해 구동 됨).
일부 포스터는 작동 속도를 언급했습니다. 실행 속도가 필요한 경우 Python이 사용하기 가장 좋은 언어가 아니기 때문에 런타임 속도는 나에게 부차적입니다. 나는 파이썬을 나에게 중요한 코딩 효율 (즉 오류없는 코드 작성)로 사용한다.
var n = 1 if (A > B) else -1
return A+n
else
가능한 경우 개인적으로 블록을 피 합니다. 참고 항목 안티 경우 캠페인
또한 그들은 회선에 대해 '추가'를 청구하지 않습니다.
"단순한 것이 복잡한 것보다 낫다" & "가독성은 왕이다"
delta = 1 if (A > B) else -1
return A + delta
dict
diff를 피하기 위해 s를 사용 하는 것은 성능 측면에서 매우 나쁜 생각입니다.