Python Language
조건부
수색…
소개
if, elif 및 else와 같은 키워드와 관련된 조건식은 부울 조건에 따라 다른 동작을 수행 할 수있는 기능을 Python 프로그램에 제공합니다 (True 또는 False). 이 절에서는 Python 조건문, 부울 논리 및 삼항 구문의 사용에 대해 설명합니다.
통사론
- <expression> if <conditional> else <expression> # 삼항 연산자
if, elif 및 else
파이썬에서는 사용 조건문의 시리즈를 정의 할 수 있습니다 if
첫 번째, 대한 elif
최대까지 나머지, 최종 (선택 사항) else
다른 조건문에 의해 체포하지 아무것도.
number = 5
if number > 2:
print("Number is bigger than 2.")
elif number < 2: # Optional clause (you can have multiple elifs)
print("Number is smaller than 2.")
else: # Optional clause (you can only have one else)
print("Number is 2.")
출력 Number is bigger than 2
elif
대신 else if
사용하면 구문 오류가 발생하고 허용되지 않습니다.
조건식 (또는 "삼항 연산자")
삼항 연산자는 인라인 조건식에 사용됩니다. 쉽게 읽을 수있는 간단하고 간결한 작업에 가장 적합합니다.
- 인수의 순서는 다른 많은 언어 (C, Ruby, Java 등)와는 다르며, Python의 "놀라운"동작에 익숙하지 않은 사람들이이를 사용하면 (순서가 바뀔 수도 있음) 버그를 유발할 수 있습니다.
- 어떤 사람들은 정상적인 사고 흐름 (조건을 먼저 생각하고 그 다음 효과를 생각 함)에 반하는 것이기 때문에 "다루기 힘듭니다"라고 생각합니다.
n = 5
"Greater than 2" if n > 2 else "Smaller than or equal to 2"
# Out: 'Greater than 2'
이 표현식의 결과는 영어로 읽혀집니다. 조건식이 참이면 왼쪽의 표현식으로 평가하고, 그렇지 않으면 오른쪽으로 평가합니다.
Tenary 연산은 다음과 같이 중첩 될 수 있습니다.
n = 5
"Hello" if n > 10 else "Goodbye" if n > 5 else "Good day"
또한 람다 함수에 조건문을 포함하는 방법을 제공 합니다 .
If 문
if condition:
body
if
문은 조건을 검사합니다. True
평가 if
문의 본문을 실행합니다. False
평가되면 본문을 건너 뜁니다.
if True:
print "It is true!"
>> It is true!
if False:
print "This won't get printed.."
조건은 유효한 표현식이 될 수 있습니다.
if 2 + 2 == 4:
print "I know math!"
>> I know math!
Else 문
if condition:
body
else:
body
else 문은 앞의 조건문이 모두 False로 평가되는 경우에만 본문을 실행합니다.
if True:
print "It is true!"
else:
print "This won't get printed.."
# Output: It is true!
if False:
print "This won't get printed.."
else:
print "It is false!"
# Output: It is false!
부울 논리 표현식
부울 논리 표현식으로 평가뿐만 아니라 True
또는 False
으로 해석 된 값 반환 True
또는 False
. 그렇지 않으면 if-else 테스트가 필요할 수도있는 로직을 나타내는 Python 방식입니다.
그리고 연산자
and
연산자는 모든 표현식을 평가하고 모든 표현식이 True
평가되면 마지막 표현식을 반환합니다. 그렇지 않으면 False
평가되는 첫 번째 값을 반환합니다.
>>> 1 and 2
2
>>> 1 and 0
0
>>> 1 and "Hello World"
"Hello World"
>>> "" and "Pancakes"
""
또는 연산자
or
연산자는 왼쪽에서 오른쪽으로 식을 평가하고 평가 첫 번째 값 반환 True
(그렇지 않은 경우에 또는 마지막 값 True
).
>>> 1 or 2
1
>>> None or 1
1
>>> 0 or []
[]
게으른 평가
이 방법을 사용할 때는 평가가 느리다는 것을 기억하십시오. 결과를 판별하기 위해 평가할 필요가없는 표현식은 평가되지 않습니다. 예 :
>>> def print_me():
print('I am here!')
>>> 0 and print_me()
0
위의 예제에서, print_me
은 절대로 실행되지 않습니다. 파이썬이 0
만나면 전체 표현식을 False
결정할 수 있기 때문입니다 ( False
). 프로그램 논리를 제공하기 위해 print_me
를 실행해야하는 경우이를 명심하십시오.
여러 조건 테스트
여러 조건을 검사 할 때 흔히 저지르는 실수는 논리를 잘못 적용하는 것입니다.
이 예제는 두 변수가 각각 2보다 큰지 확인하려고합니다.이 문은 - if (a) and (b > 2)
로 평가됩니다. a
가 0이 아닐 때 bool(a)
가 True
평가되기 때문에 예기치 않은 결과가 발생합니다.
>>> a = 1
>>> b = 6
>>> if a and b > 2:
... print('yes')
... else:
... print('no')
yes
각 변수는 개별적으로 비교해야합니다.
>>> if a > 2 and b > 2:
... print('yes')
... else:
... print('no')
no
변수가 여러 값 중 하나인지 확인하는 경우에도 이와 유사한 실수가 발생합니다. 이 예제의 문은 - if (a == 3) or (4) or (6)
됩니다. bool(4)
및 bool(6)
각각 True
평가되기 때문에 예기치 않은 결과가 발생합니다.
>>> a = 1
>>> if a == 3 or 4 or 6:
... print('yes')
... else:
... print('no')
yes
다시 한 번 각 비교가 이루어져야합니다.
>>> if a == 3 or a == 4 or a == 6:
... print('yes')
... else:
... print('no')
no
in 연산자를 사용하는 것은이를 작성하는 표준 방법입니다.
>>> if a in (3, 4, 6):
... print('yes')
... else:
... print('no')
no
진실 가치
다음 값은 부울 연산자로 적용될 때 False
평가된다는 점에서 False
으로 간주됩니다.
- 없음
- 그릇된
-
0
또는0
과 같은 임의의 숫자 값 (예 :0L
,0.0
,0j
- 빈 시퀀스 :
''
,""
,()
,[]
- 빈 매핑 :
{}
-
__bool__
또는__len__
메서드가 0 또는False
반환하는 사용자 정의 형식
파이썬의 다른 모든 값은 True
평가됩니다.
참고 : 일반적인 실수는 차이점이 중요한 경우 다른 거짓 값을 반환하는 연산의 거짓을 단순히 확인하는 것입니다. 예를 들어, if foo()
가 더 명시적인 if foo() is None
보다는 if foo() is None
cmp 함수를 사용하여 두 객체의 비교 결과 얻기
Python 2에는 한 객체가 다른 객체보다 작거나 같은지 또는 더 큰지를 결정할 수있는 cmp
함수가 포함되어 있습니다. 이 함수는 세 가지 옵션 중 하나를 기반으로 목록에서 선택 항목을 선택하는 데 사용할 수 있습니다.
인쇄 할 필요가 가정 'greater than'
경우 x > y
, 'less than'
경우 x < y
와 'equal'
의 경우 x == y
.
['equal', 'greater than', 'less than', ][cmp(x,y)]
# x,y = 1,1 output: 'equal'
# x,y = 1,2 output: 'less than'
# x,y = 2,1 output: 'greater than'
cmp(x,y)
는 다음 값을 반환합니다.
비교 | 결과 |
---|---|
x <y | -1 |
x == y | 0 |
x> y | 1 |
이 기능은 파이썬 당신은 사용할 수 있습니다 3. 제거 cmp_to_key(func)
에 위치한 도우미 함수 functools
주요 기능에 오래된 비교 기능을 변환하는 파이썬 3를.
목록 이해를 사용한 조건부 표현식 평가
Python은리스트 comprehension을 해킹하여 조건식을 평가할 수있게합니다.
예를 들어,
[value_false, value_true][<conditional-test>]
예:
>> n = 16
>> print [10, 20][n <= 15]
10
여기서 n<=15
는 False
반환합니다 (파이썬에서는 0과 같습니다). 따라서 파이썬이 평가하는 것은 :
[10, 20][n <= 15]
==> [10, 20][False]
==> [10, 20][0] #False==0, True==1 (Check Boolean Equivalencies in Python)
==> 10
inbuilt __cmp__
메쏘드는 3 개의 가능한 값을 반환했습니다 : 0, 1, -1, cmp (x, y)가 반환되었습니다. 0 : 두 객체가 같은 경우 1 : x> y -1 : x <y
목록의 첫 번째 (즉, 인덱스 0), 두 번째 (즉, 인덱스 1) 및 마지막 (즉, 인덱스 -1) 요소를 반환하기 위해 목록 내포와 함께 사용할 수 있습니다. 이 유형의 조건부를 우리에게줍니다 :
[value_equals, value_greater, value_less][<conditional-test>]
마지막으로, 위의 모든 예제에서 파이썬은 하나를 선택하기 전에 두 가지를 평가합니다. 선택한 분기 만 평가하려면 :
[lambda: value_false, lambda: value_true][<test>]()
마지막에 ()
를 추가하면 람다 함수가 끝에 대해서만 호출 / 평가됩니다. 따라서 선택한 지점 만 평가합니다.
예:
count = [lambda:0, lambda:N+1][count==N]()
객체가 없음인지 테스트하고 할당
할당되지 않았 음을 나타내는 None
인 경우 객체에 무언가를 할당하려고합니다. 우리는 aDate
사용 aDate
.
이를 수행하는 가장 간단한 방법은 is None
테스트를 사용하는 것 is None
.
if aDate is None:
aDate=datetime.date.today()
(더 파이썬적인 말 is None
== None
대신 is None
것입니다.)
그러나 이것은 not None
이 부울 식에서 True
로 평가 not None
개념을 이용함으로써 약간 최적화 될 수 있습니다. 다음 코드는 동일합니다.
if not aDate:
aDate=datetime.date.today()
그러나 더 Pythonic 방법이 있습니다. 다음 코드도 동일합니다.
aDate=aDate or datetime.date.today()
이것은 단락 회로 평가를 수행 합니다. aDate
가 초기화되어 있고 not None
이 not None
경우, 넷 효과없이 자체에 할당됩니다. is None
이면 datetime.date.today()
가 aDate
할당됩니다.