아래 링크를 읽었지만 내 질문을 다루지 않습니다.
파이썬에 삼항 조건 연산자가 있습니까?(문제는 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)
실제로 무한대까지 중첩 할 수 있습니다. 즐겨 😉
답변
선택적으로 실제로 get
a 메서드를 사용할 수 있습니다 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이 할당됩니다.