[python] if-elif-else 문을 한 줄에 넣습니까?

아래 링크를 읽었지만 내 질문을 다루지 않습니다.
파이썬에 삼항 조건 연산자가 있습니까?(문제는 if-else 문을 한 줄로 압축하는 것입니다)

한 줄에 맞도록 if-elif-else 문을 작성하는 더 쉬운 방법이 있습니까?
예를 들면

if expression1:
   statement1
elif expression2:
   statement2
else:
   statement3

또는 실제 예 :

if i > 100:
    x = 2
elif i < 100:
    x = 1
else:
    x = 0

위의 예를 다음과 같이 작성할 수 있다면 더 간결 해 보일 수 있다고 생각합니다.

x=2 if i>100 elif i<100 1 else 0 [WRONG]



답변

아니요, 불가능합니다 (적어도 임의의 진술로는 불가능). 또한 바람직하지도 않습니다. 모든 것을 한 줄에 맞추면 줄 길이가 80자를 넘지 않아야하는 PEP-8을 위반할 가능성이 높습니다 .

또한 Zen of Python : “가독성이 중요합니다”에 위배됩니다. ( import this모든 것을 읽으려면 Python 프롬프트에 입력 하십시오).

Python에서 삼항 표현식을 사용할 있지만 표현식에만 사용할 수 있으며 문에는 사용할 없습니다.

>>> a = "Hello" if foo() else "Goodbye"

편집하다:

수정 된 질문은 이제 할당되는 값을 제외하고 세 문이 동일하다는 것을 보여줍니다. 이 경우 연결 삼항 연산자가 작동하지만 여전히 가독성이 떨어진다고 생각합니다.

>>> i=100
>>> a = 1 if i<100 else 2 if i>100 else 0
>>> a
0
>>> i=101
>>> a = 1 if i<100 else 2 if i>100 else 0
>>> a
2
>>> i=99
>>> a = 1 if i<100 else 2 if i>100 else 0
>>> a
1


답변

다른 경우에 다른 표현 만 필요하면 다음과 같이 작동 할 수 있습니다.

expr1 if condition1 else expr2 if condition2 else expr

예를 들면 :

a = "neg" if b<0 else "pos" if b>0 else "zero"


답변

else 문에 다른 if 절을 중첩하면됩니다. 하지만 그렇다고 더 예쁘게 보이지는 않습니다.

>>> x=5
>>> x if x>0 else ("zero" if x==0 else "invalid value")
5
>>> x = 0
>>> x if x>0 else ("zero" if x==0 else "invalid value")
'zero'
>>> x = -1
>>> x if x>0 else ("zero" if x==0 else "invalid value")
'invalid value'


답변

다른 답변에도 불구하고 : 예 가능합니다 .

if expression1:
   statement1
elif expression2:
   statement2
else:
   statement3

다음 하나의 라이너로 변환됩니다.

statement1 if expression1 else (statement2 if expression2 else statement3)

실제로 무한대까지 중첩 할 수 있습니다. 즐겨 😉


답변

선택적으로 실제로 geta 메서드를 사용할 수 있습니다 dict.

x = {i<100: -1, -10<=i<=10: 0, i>100: 1}.get(True, 2)

get키 중 하나가 다음과 같이 평가되는 경우 메서드 가 필요하지 않습니다 True.

x = {i<0: -1, i==0: 0, i>0: 1}[True]

최대 하나의 키가 이상적으로 평가되어야합니다 True. 둘 이상의 키가로 평가 True되면 결과를 예측할 수없는 것처럼 보일 수 있습니다.


답변

제 의견으로는 읽을 수없는 대안이 있지만 어쨌든 호기심으로 공유하겠습니다.

x = (i>100 and 2) or (i<100 and 1) or 0

자세한 정보 : https://docs.python.org/3/library/stdtypes.html#boolean-operations-and-or-not


답변

if i > 100:
    x = 2
elif i < 100:
    x = 1
else:
    x = 0

위에서 언급 한 코드를 한 줄로 사용하려면 다음을 사용할 수 있습니다.

x = 2 if i > 100 else 1 if i < 100 else 0

이렇게하면 x는 i> 100이면 2, i <100이면 1, i = 100이면 0이 할당됩니다.