if-condition-assignment 한 줄
다음 코드가 있습니다.
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
Ruby가 약간 다르게 작동하기 때문에 유효한 Ruby 코드입니다.
이것을 사용하십시오 :
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 == True)
이것이 저의 새로운 최종 답변입니다. 이전 답변은 다음과 같았으며 명시된 문제에 대해 과잉이었습니다. Getting_too_clever == not Good
. 다음은 이전 답변입니다 ... True
cond에 대해 한 가지를 추가 하고 다른 것을 추가하려는 경우 여전히 좋습니다 False
.
num1 = 10 + (0,10)[someBoolValue == True]
당신이 언급 한 num1
것은 이미 내버려 두어야 할 가치가있을 것입니다. 이것이 num1 = 10
게시물의 첫 번째 문장이기 때문에 얻을 작업 20
은 10
.
num1 = 10
someBoolValue = True
num1 = 10 + (0,10)[someBoolValue == True]
print(f'num1 = {num1}\nsomeBoolValue = {someBoolValue}')
이 출력을 생성
num1 = 20
someBoolValue = True
num1 = 20 * someBoolValue or num1
원한다면 num1 = (someBoolValue이면 20, 그렇지 않으면 num1)을 사용할 수 있습니다.
제가 제안 할 수있는 것은 다음과 같습니다. 다른 변수를 사용하여 if 절을 파생하고 num1에 할당합니다.
암호:
num2 =20 if someBoolValue else num1
num1=num2
또 다른 방법 num1 = (20*boolVar)+(num1*(not boolVar))
어떤 부울이 참이면 메소드를 호출 else None
하려면 삼진을 종료하도록 넣을 수 있습니다 .
>>> a=1
>>> print(a) if a==1 else None
1
>>> print(a) if a==2 else None
>>> a=2
>>> print(a) if a==2 else None
2
>>> print(a) if a==1 else None
>>>
이런 식으로 할 수 있습니다.
try:
a = [i for i in [20] if False][0]
except IndexError:
print("Do what ever you want here")
You can solve your problem this way but, using 'try/except block' is not the best practice for python.
참고URL : https://stackoverflow.com/questions/7872838/one-line-if-condition-assignment
'programing tip' 카테고리의 다른 글
불변이란 무엇을 의미합니까? (0) | 2020.08.16 |
---|---|
자바 : Class.this (0) | 2020.08.16 |
전체 S3 버킷에 대한 캐시 제어를 자동으로 설정 (버킷 정책 사용?) (0) | 2020.08.16 |
이 'for'루프가 중지되고 왜 / 왜 안됩니까? (0) | 2020.08.16 |
C 함수 내부의 정적 변수 (0) | 2020.08.16 |