[python] 조건부 할당 한 줄

다음 코드가 있습니다

num1 = 10
someBoolValue = True

나는의 값으로 설정해야 num1하는 20경우 someBoolValue입니다 True; 그렇지 않으면 아무 것도하지 마십시오. 그래서 여기에 대한 코드가 있습니다.

num1 = 20 if someBoolValue else num1

어쨌든 ...else num1깨끗하게 보이도록 부품을 피할 수 있습니까? 에 해당

if someBoolValue:
    num1 = 20

나는 ...else pass이것을 다음 과 같이 바꾸려고 시도했다 num1=20 if someBoolValue else pass. 내가 가진 것은 구문 오류였습니다. 나도 그 ...else num1부분을 생략 할 수 없었다 .



답변

파이썬에서 이것이 가능하지 않다고 생각합니다. 실제로하려는 일이 다음과 같이 확장 될 수 있기 때문입니다.

num1 = 20 if someBoolValue else num1

배제 else num1하면 할당이 실제로 무언가를 반환해야하기 때문에 구문 오류가 발생합니다.

다른 사람들이 이미 언급 했듯이이 작업을 수행 할 수는 있지만 다음에 해당 코드를 읽을 때 혼란스러워 할 수 있기 때문에 좋지 않습니다.

if someBoolValue: num1=20

나는 num1 = someBoolValue and 20 or num1똑같은 이유로 큰 팬이 아닙니다 . 나는 실제로 그 라인이 무엇을하고 있는지 두 번 생각해야합니다.

실제로 원하는 것을 달성하는 가장 좋은 방법은 원본 버전입니다.

if someBoolValue:
    num1 = 20

가장 좋은 이유는 당신이하고 싶은 일이 매우 분명하기 때문에 자신을 혼란스럽게하지 않을 것입니다.

또한, num1 = 20 if someBoolValue루비가 조금 다르게 작동하기 때문에 부수적 으로 유효한 루비 코드입니다.


답변

이것을 사용하십시오 :

num1 = 20 if someBoolValue else num1


답변

한 줄로 :

if someBoolValue: num1 = 20

하지만 그렇게하지 마십시오. 이 스타일은 일반적으로 예상되지 않습니다. 사람들은 명확성과 일관성을 위해 더 긴 형식을 선호합니다.

if someBoolValue:
    num1 = 20

(동일하게 낙타 모자는 피해야합니다. 대신을 사용하십시오 some_bool_value.)

참고 인라인 것을 표현 some_value if predicate 없는 else술어가 거짓 인 경우 반환 값이되지 않을 것 때문에 부분은 존재하지 않습니다. 그러나 표현식은 모든 경우에 명확하게 정의 된 리턴 값을 가져야합니다. 이것은 Ruby 나 Perl과 같은 사용법과 다릅니다.


답변

다음 중 하나를 사용할 수 있습니다.

(falseVal, trueVal)[TEST]

TEST and trueVal or falseVal


답변

아니요. 같은 num1 = 20 if someBoolValue것이 효과 가 있기를 바랐 지만 그렇지 않습니다. 가장 좋은 방법은 if성명서를 작성하는 것입니다.

if someBoolValue:
    num1 = 20


답변

num1 = 10 + 10*(someBoolValue is True)

이것이 나의 새로운 최종 답변입니다. 사전 답변은 다음과 같으며 명시된 문제에 대해 과도하게 사용되었습니다. Getting_too_clever == not Good. 다음은 사전 답변입니다 … Truecond 에 하나를 추가 하고 다른 하나를 추가하려는 경우 여전히 좋습니다 False.

num1 = 10 + (0,10)[someBoolValue is True]

num1이미 언급 한 값은 이미 그대로 두어야합니다. 나는 그것이 num1 = 10포스트의 첫 번째 진술이기 때문에 가정 했으므로 얻을 수있는 작업 20은 add 10입니다.

num1 = 10
someBoolValue = True

num1 = 10 + (0,10)[someBoolValue is True]

print(f'num1 = {num1}\nsomeBoolValue = {someBoolValue}')

이 출력을 생성

num1 = 20
someBoolValue = True


답변

num1 = 20 * someBoolValue or num1