수색…


소개

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<=15False 반환합니다 (파이썬에서는 0과 같습니다). 따라서 파이썬이 평가하는 것은 :

[10, 20][n <= 15]
==> [10, 20][False] 
==> [10, 20][0]     #False==0, True==1 (Check Boolean Equivalencies in Python)
==> 10
Python 2.x 2.7

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 Nonenot None 경우, 넷 효과없이 자체에 할당됩니다. is None 이면 datetime.date.today()aDate 할당됩니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow