programing tip

if-condition-assignment 한 줄

itbloger 2020. 8. 16. 19:55
반응형

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 someBoolValueRuby가 약간 다르게 작동하기 때문에 유효한 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. 다음은 이전 답변입니다 ... Truecond에 대해 한 가지를 추가 하고 다른 것을 추가하려는 경우 여전히 좋습니다 False.

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

당신이 언급 한 num1것은 이미 내버려 두어야 할 가치가있을 것입니다. 이것이 num1 = 10게시물의 첫 번째 문장이기 때문에 얻을 작업 2010.

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

반응형