if-elif-else 문구를 한 줄에 넣는 거?
아래 링크를 읽었지만, 제 질문에 대한 답변이 되지 않습니다.
Python에는 3진수 조건 연산자가 있나요?(질문은 if-signment 스테이트먼트를 한 줄로 압축하는 것입니다.)
한 줄에 맞게 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]
아니요, 이것은 가능하지 않습니다(적어도 임의적인 문장으로는 가능하지 않습니다). 또한 바람직하지도 않습니다.모든 것을 1줄에 장착하면 PEP-8에 위반될 가능성이 높으며, 이 경우 행의 길이는 80자를 초과할 수 없습니다.
또한 "가독성이 중요하다"는 Python의 Zen에도 반대합니다.(종류import this
Python 프롬프트에서 전체 내용을 읽습니다.)
Python에서는 삼원식을 사용할 수 있지만 문장이 아닌 식에만 사용할 수 있습니다.
>>> a = "Hello" if foo() else "Goodbye"
편집:
수정된 질문에는 세 개의 문장이 할당된 값을 제외하고 동일한 것으로 나타납니다.이 경우, 연결된 3진 연산자는 작동하지만, 여전히 읽기 쉽지는 않다고 생각합니다.
>>> 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"
몇 가지 다른 답변도 있습니다.예, 가능합니다.
if expression1:
statement1
elif expression2:
statement2
else:
statement3
는 다음 1개의 라이너로 변환됩니다.
statement1 if expression1 else (statement2 if expression2 else statement3)
사실 당신은 그것들을 무한히 간직할 수 있습니다.즐기세요;)
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'
제 의견으로는 읽을 수 없는 대안이 있지만, 어쨌든 궁금해서 공유하겠습니다.
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
실제로 사용할 수도 있습니다.get
의 방법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]
최소 1개의 키가 이상적으로 평가되어야 합니다.True
둘 이상의 키가 평가된 경우True
결과를 예측할 수 없는 것처럼 보일 수 있습니다.
네, 다음과 같이 할 수 있습니다.
i = int(input('type your num here : '))
x = 2 if i > 100 else ( 1 if i < 100 else 0)
print (x)
3진 연산자는 간결한 표현에 가장 적합합니다.구문은 다음과 같습니다.variable = value_1 if condition else value_2
따라서 이 예에서는 3진 연산자를 두 번 적용해야 합니다.
i = 23 # set any value for i
x = 2 if i > 100 else 1 if i < 100 else 0
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
이 경우 i가 100을 넘으면 x가 2, i가 100보다 작으면 1, i = 100이면 0이 할당됩니다.
중첩된 3진 연산자가 최상의 솔루션입니다.
예 -
4 = 1
3 = 2
2 = 3
1 = 4
a = 4
prio = 4 if a == 1 else (3 if a == 2 else (2 if a == 3 else 1))
사람들은 이미 삼원적 표현을 언급했다.간단한 조건부 할당을 예로 들면 수학식을 사용하여 조건부 할당을 수행할 수 있습니다.이것은 당신의 코드를 매우 쉽게 읽을 수 있게 하지 않을 수도 있지만, 그것은 꽤 짧은 한 줄에 그것을 가져다 줍니다.예시는 다음과 같이 기술할 수 있습니다.
x = 2*(i>100) | 1*(i<100)
비교는 True 또는 False가 되며 숫자를 곱하면 1 또는 0이 됩니다.중간에 | 대신 +를 사용할 수 있습니다.
그것은 또한 당신의 표현의 성격에 달려있다."not doing it"이라는 다른 답변에 대한 일반적인 조언은 일반적인 문장과 일반적인 표현에 매우 유효합니다.
그러나 필요한 것은 특정 옵션의 값에 따라 다른 함수를 호출하는 것과 같은 "디스패치" 테이블뿐이라면 함수를 사전 내에 호출할 수 있습니다.
예를 들어 다음과 같습니다.
def save():
...
def edit():
...
options = {"save": save, "edit": edit, "remove": lambda : "Not Implemented"}
option = get_input()
result = options[option]()
if-else 대신:
if option=="save":
save()
...
nested ternary if 문을 사용할 수 있습니다.
# if-else ternary construct
country_code = 'USA'
is_USA = True if country_code == 'USA' else False
print('is_USA:', is_USA)
# if-elif-else ternary construct
# Create function to avoid repeating code.
def get_age_category_name(age):
age_category_name = 'Young' if age <= 40 else ('Middle Aged' if age > 40 and age <= 65 else 'Senior')
return age_category_name
print(get_age_category_name(25))
print(get_age_category_name(50))
print(get_age_category_name(75))
MESSAGELENGHT = 39
"A normal function call using if elif and else."
if MESSAGELENGHT == 16:
Datapacket = "word"
elif MESSAGELENGHT == 8:
Datapacket = 'byte'
else:
Datapacket = 'bit'
#similarly for a oneliner expresion:
Datapacket = "word" if MESSAGELENGHT == 16 else 'byte' if MESSAGELENGHT == 8 else 'bit'
print(Datapacket)
고마워요.
언급URL : https://stackoverflow.com/questions/14029245/putting-an-if-elif-else-statement-on-one-line
'itsource' 카테고리의 다른 글
1114(HY000):테이블이 꽉 찼다 (0) | 2022.09.05 |
---|---|
Mockito에서 varargs를 적절하게 일치시키는 방법 (0) | 2022.09.05 |
XAMPP에 MariaDB 또는 MySQL이 있습니까? (0) | 2022.09.05 |
Amazon EC2 인스턴스의 MariaDB에 원격으로 연결하는 데 문제가 있습니다. (0) | 2022.09.05 |
파일의 MD5 체크섬 생성 (0) | 2022.09.05 |