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 프롬프트에 입력 하십시오).
파이썬 삼항 표현식을에서 사용할 수 있지만 표현식에만 사용할 수 있으며 문에는 사용할 수 없습니다.
>>> 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 문에 다른 경우 절을 중첩하면됩니다. 하지만 그렇다고 더 예쁘게 말할 수 있습니다.
>>> 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'
선택적으로 메소드 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]
최대 하나의 키가 이상적으로 평가되어야합니다 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이 할당됩니다.
또한 표현의 성격에 따라 다릅니다. "하지 않음"의 다른 답변에 대한 일반적인 조언은 일반 문과 일반 표현식에 매우 유효합니다.
하지만 주어진 옵션의 값에 따라 다른 함수를 호출하는 것과 같이 "dispacth"테이블 만 있으면 사전에 호출 할 함수를 넣을 수 있습니다.
다음과 같은 것 :
def save():
...
def edit():
...
options = {"save": save, "edit": edit, "remove": lambda : "Not Implemented"}
option = get_input()
result = options[option]()
(대신
if option=="save":
save()
...
)
사람들은 이미 삼항 표현을 언급했습니다. 때로는 간단한 조건부 할당을 예로 들어 수학 식을 사용하여 조건부 할당을 수행 할 수 있습니다. 이것은 당신의 코드를 매우 읽기 쉽게 만들지는 못하지만 상당히 짧은 한 줄에 표시됩니다. 귀하의 예는 다음과 같이 작성할 수 있습니다.
x = 2*(i>100) | 1*(i<100)
비교는 True 또는 False가되고 숫자와 곱하면 1 또는 0이됩니다. 하나는 | 대신 +를 사용할 수 있습니다. 중간에.
삼항 연산자는 간결한 표현하는 가장 좋은 방법입니다. 구문은 variable = value_1 if condition else value_2
입니다. 따라서 예를 들어 삼항 연산자를 두 번 적용해야합니다.
i = 23 # set any value for i
x = 2 if i > 100 else 1 if i < 100 else 0
중첩 된 삼항 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))
참고 URL : https://stackoverflow.com/questions/14029245/putting-an-if-elif-else-statement-on-one-line
'IT' 카테고리의 다른 글
ASP.NET Core를 사용하여 쿼리에서 값을 읽는 방법은 무엇입니까? (0) | 2020.08.26 |
---|---|
C의 정수 값에서 비트 단위 데이터를 얻으려면 어떻게해야합니까? (0) | 2020.08.26 |
C #의 암호화에서 열거 형 값을 얻는 방법은 무엇입니까? (0) | 2020.08.26 |
DTO = ViewModel? (0) | 2020.08.26 |
Rails 콘솔에서 실행 시간을 얻는 방법은 무엇입니까? (0) | 2020.08.26 |