때로는 if
s의 긴 조건 을 여러 줄로 나눕니다. 이를 수행하는 가장 확실한 방법은 다음과 같습니다.
if (cond1 == 'val1' and cond2 == 'val2' and
cond3 == 'val3' and cond4 == 'val4'):
do_something
동작이 조건과 혼합되기 때문에 시각적으로별로 매력적이지 않습니다. 그러나 4 공백의 올바른 파이썬 들여 쓰기를 사용하는 자연스러운 방법입니다.
내가 사용하는 순간 :
if ( cond1 == 'val1' and cond2 == 'val2' and
cond3 == 'val3' and cond4 == 'val4'):
do_something
그러나 이것은 매우 예쁘지 않습니다. 🙂
다른 방법을 추천 할 수 있습니까?
답변
두 번째 조건부 라인에는 4 개의 공백을 사용할 필요가 없습니다. 아마도 사용 :
if (cond1 == 'val1' and cond2 == 'val2' and
cond3 == 'val3' and cond4 == 'val4'):
do_something
또한 공백이 생각보다 유연하다는 것을 잊지 마십시오.
if (
cond1 == 'val1' and cond2 == 'val2' and
cond3 == 'val3' and cond4 == 'val4'
):
do_something
if (cond1 == 'val1' and cond2 == 'val2' and
cond3 == 'val3' and cond4 == 'val4'):
do_something
그러나 둘 다 상당히 추악합니다.
괄호를 잃을 수도 있습니다 ( 스타일 가이드 는 이것을 권장하지 않습니다)?
if cond1 == 'val1' and cond2 == 'val2' and \
cond3 == 'val3' and cond4 == 'val4':
do_something
이것은 적어도 당신에게 차별화를 제공합니다.
또는:
if cond1 == 'val1' and cond2 == 'val2' and \
cond3 == 'val3' and \
cond4 == 'val4':
do_something
나는 내가 선호하는 것 같아 :
if cond1 == 'val1' and \
cond2 == 'val2' and \
cond3 == 'val3' and \
cond4 == 'val4':
do_something
다음은 스타일 가이드 입니다 (2010 년 이후) 괄호 사용을 권장합니다.
답변
나는 단순히 AND 또는 OR 인 퇴화 된 경우에 다음에 의지했습니다.
if all( [cond1 == 'val1', cond2 == 'val2', cond3 == 'val3', cond4 == 'val4'] ):
if any( [cond1 == 'val1', cond2 == 'val2', cond3 == 'val3', cond4 == 'val4'] ):
그것은 몇자를 면도하고 조건에 미묘함이 없음을 분명히합니다.
답변
누군가 가 여기에서 수직 공백의 사용을 옹호해야합니다! 🙂
if ( cond1 == val1
and cond2 == val2
and cond3 == val3
):
do_stuff()
이것은 각 조건을 명확하게 보여줍니다. 또한보다 복잡한 조건을보다 명확하게 표현할 수 있습니다.
if ( cond1 == val1
or
( cond2_1 == val2_1
and cond2_2 >= val2_2
and cond2_3 != bad2_3
)
):
do_more_stuff()
예, 우리는 명확성을 위해 약간의 수직 부동산을 거래하고 있습니다. 그만한 가치가 있습니다.
답변
나는 매우 큰 if 조건이있을 때이 스타일을 선호합니다.
if (
expr1
and (expr2 or expr3)
and hasattr(thingy1, '__eq__')
or status=="HappyTimes"
):
do_stuff()
else:
do_other_stuff()
답변
내 개인적인 견해는 다음과 같습니다. 장기 조건은 (불확실한) 부울 리턴 함수 / 메소드로 리팩토링을 제안하는 코드 냄새입니다. 예를 들면 다음과 같습니다.
def is_action__required(...):
return (cond1 == 'val1' and cond2 == 'val2'
and cond3 == 'val3' and cond4 == 'val4')
이제 여러 줄 조건을보기 좋게 만들 수있는 방법을 찾게되면 아마도 그 내용이 만족스럽고 리팩토링을 건너 뛸 수있을 것입니다.
반면에, 나의 미적 감각을 교란시키는 것은 리팩토링에 대한 인센티브로 작용합니다.
따라서 필자의 결론은 여러 회선 조건이보기 흉한 것으로 보이며이를 피하기위한 동기가된다는 것입니다.
답변
이것은 크게 향상되지 않지만 …
allCondsAreOK = (cond1 == 'val1' and cond2 == 'val2' and
cond3 == 'val3' and cond4 == 'val4')
if allCondsAreOK:
do_something
답변
and
키워드를 두 번째 줄로 옮기고 조건을 포함하는 모든 줄을 4 개가 아닌 2 개의 공백으로 들여 쓰는 것이 좋습니다 .
if (cond1 == 'val1' and cond2 == 'val2'
and cond3 == 'val3' and cond4 == 'val4'):
do_something
이것이 바로 코드 에서이 문제를 해결하는 방법입니다. 키워드를 줄의 첫 단어로 사용하면 조건을보다 쉽게 읽을 수 있으며 공간 수를 줄이면 조건과 동작을 더욱 구분할 수 있습니다.