Gidhub BE Developer

If, 단축 평가

2018-02-01
goodGid

if

  • if (조건식) 이후에 콜론(:)을 지정해 조건식이 종료됨을 나타낸다.

  • C or JAVA 계열은 ‘ grade >= 70 && grade <80 ‘

  • 파이썬은 더욱 직관적으로 ‘ 70 <= score < 80 ‘

>>> score = int(input(('Input Score : ')))
Input Score : 77

>>> if 90 <= score <= 100:
...     grade = 'A'
... elif 80 <= score < 90:
...     grade = 'B'
... else:
...     grade = 'C'

>>> print("Grade is " + grade )
Grade is C
>>> 

조건식 참/거짓 판단

정수 계열 : 0
실수 계열 : 0.0
시퀀스 계열 : (), [], {}, 빈 문자열(''), 아무것도 없음을 의미하는 None
==> 언제나 거짓으로 판단
>>> bool('')
False

>>> bool(())
False

>>> bool(None)
False

>>> bool(none)        # 일부러 Input을 none로 넣어봄 ! 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'none' is not defined

단축 평가

  • 논리식 판단은 Left -> Right로 진행 된다.

>>> a = 0 
>>> if a & 10 / a :
...     print(" a is 0 ")
... else :
...     print(" Success " )

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero

  • ZeroDivisionError 에러는 10이란 값을 0으로 나누려고 하였기 때문에 나는 에러다.
>>> a = 0
>>> if a and 10 / a :
...     print(" a is 0 " )
... else :
...     print(" Success " )

 Success 

  • 논리적인 구조는 같지만

    & -> and 사용하면 단축 평가가 이뤄져 예외가 발생하지 않는다.

  • a가 ‘0’인 경우

    조건식 [ a & 10/1 ] 중 ‘a’가 거짓이기 때문에 조건식 전체를 보지 않는 것을 단축 평가라 한다.

  • 파이썬에서는 and, or의 경우

    반드시 좌변 피연산자가 우변 피연산자보다 먼저 단축 평가되도록 파이썬 인터프리터에서 보장하고 있다.

  • 단축 평가로 얻을 수 있는 장점은 다음과 같다.

    1. 조건문 결과가 결정되는 시점 이후로 추가 판별 연산을 수행하지 않기 때문에 속도가 향상

    2. 예제와 같은 런타임 에러발생을 try ~ except 구문이 아닌 논리식으로 사전에 차단 가능


Recommend

Index