복붙노트

[PYTHON] 하나의 if-condition-assignment 행

PYTHON

하나의 if-condition-assignment 행

다음 코드가 있습니다.

num1 = 10
someBoolValue = True

someBoolValue가 True이면 num1 값을 20으로 설정해야합니다. 그렇지 않으면 아무것도하지 않습니다. 그래서, 여기에 대한 나의 코드가있다.

num1 = 20 if someBoolValue else num1

거기에 어딘가에 내가 더 깨끗한 보이게 num1 부분을 피할 수 있습니까? 에 해당하는

if someBoolValue:
    num1 = 20

나는 그것을 대체하려고 시도했다. 그렇지 않으면 someBoolValue else가 전달되면 num1 = 20과 같이 전달한다. 내가 가진 모든 구문 오류가 발생했습니다. 그저 ... num1 부분을 생략 할 수는 없습니다.

감사

해결법

  1. ==============================

    1.파이썬에서는 이것이 가능하지 않다고 생각합니다. 실제로하려고하는 것은 아마도 다음과 같이 확장 될 것입니다.

    파이썬에서는 이것이 가능하지 않다고 생각합니다. 실제로하려고하는 것은 아마도 다음과 같이 확장 될 것입니다.

    num1 = 20 if someBoolValue else num1
    

    else num1을 제외하면 과제가 실제로 무언가를 반환해야한다는 확신 때문에 구문 오류가 발생합니다.

    다른 사람들이 이미 언급했듯이 다음과 같이 할 수는 있지만 다음 번에 코드 조각을 읽을 때 혼란 스러울 것입니다.

    if someBoolValue: num1=20
    

    나는 똑같은 이유로 num1 = someBoolValue와 20 또는 num1을 좋아하지 않습니다. 나는 실제로 그 라인이하고있는 것에 대해 두 번 생각해야한다.

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

    if someBoolValue:
        num1 = 20
    

    그게 가장 좋은 이유는 당신이하고 싶은 일이 아주 분명하고 자신을 혼란스럽게하지 않거나 다른 사람이 그 코드와 나중에 접촉하게 될 것이기 때문입니다.

    또한, 보조 노트로 someBoolValue가 유효한 Ruby 코드 인 경우 num1 = 20이됩니다. Ruby가 조금 다르게 작동하기 때문입니다.

  2. ==============================

    2.이것을 사용하십시오 :

    이것을 사용하십시오 :

    num1 = 20 if someBoolValue else num1
    
  3. ==============================

    3.한 줄에 :

    한 줄에 :

    if someBoolValue: num1 = 20
    

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

    if someBoolValue:
        num1 = 20
    

    (낙타 캡은 피해야합니다. 따라서 some_bool_value를 사용하십시오.)

    술어가 거 ~ 인 경우 리턴 값이 없으 G로 else 파트가없는 술어가 존재하지 않으면 인라인 표현식 some_value에 유의하십시오. 그러나 표현식에는 모든 경우에 명확하게 정의 된 반환 값이 있어야합니다. 이것은 Ruby 나 Perl처럼 사용법과 다릅니다.

  4. ==============================

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

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

    (falseVal, trueVal)[TEST]
    
    TEST and trueVal or falseVal
    
  5. ==============================

    5.아니, someBoolValue가 작동하면 num1 = 20과 같은 것을 기대하고 있었지만 그렇지 않습니다. 가장 좋은 방법은 if ​​문을 작성한 것과 같습니다.

    아니, someBoolValue가 작동하면 num1 = 20과 같은 것을 기대하고 있었지만 그렇지 않습니다. 가장 좋은 방법은 if ​​문을 작성한 것과 같습니다.

    if someBoolValue:
        num1 = 20
    
  6. ==============================

    6.

    num1 = 10 + 10*(someBoolValue == True)
    

    그것이 나의 새로운 최종 답변이다. 이전의 대답은 다음과 같았고 명시된 문제에 대한 과잉이었다. Getting_too_clever == 좋지 않습니다. 이전 답변은 ... 참으로 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
    
  7. ==============================

    7.

    num1 = 20 * someBoolValue or num1
    
  8. ==============================

    8.원하는 경우 num1 = (someBoolValue else num1이면 20)을 확실히 사용할 수 있습니다.

    원하는 경우 num1 = (someBoolValue else num1이면 20)을 확실히 사용할 수 있습니다.

  9. ==============================

    9.여기 제가 제안 할 수있는 것이 있습니다.  다른 변수를 사용하여 if 절을 파생시키고 num1에 할당합니다.

    여기 제가 제안 할 수있는 것이 있습니다.  다른 변수를 사용하여 if 절을 파생시키고 num1에 할당합니다.

    암호:

    num2 =20 if someBoolValue else num1
    num1=num2
    
  10. from https://stackoverflow.com/questions/7872838/one-line-if-condition-assignment by cc-by-sa and MIT license