본문 바로가기

Python_programming/초중급편

python if not , isinstnce

이번 시간에서는 파이썬 if not 에 대해 알아보려고 합니다. 

 

조건문의 구조는 보통 아래처럼 일반화 됩니다. 

 

if 조건문:
    실행문
elif 조건문:
    실행문
else:
    실행문

 

 

여기서 조금 디테일하게 이해할 필요가 있습니다. 

 

 

 

if True:
    print('참') # True 는 참 
else:
    print('거짓')
    
if False:
    print('참')
else:
    print('거짓') # False 는 거짓

if None:
    print('참')
else:
    print('거짓') # None 은 거짓

 

 

(None 은 False 로 취급됨을 위 코드에서 확인해주세요)

 

-----------------------------

 

 

 

if 와 not 조건문 을 구분해서 보셔야 합니다. 

저도 처음에 같이 결합해서 보다보니 이 부분이 좀 헷갈렸습니다. 

"조건문을 만족하면 실행된다" 라고 이해를 했었는데 이러면 " not 때문에 false 일 때 if 문의 실행문이 동작하는구나 " 라고 생각했습니다. 



이걸 자연스럽게 이해하는 분도 있을 겁니다. 하지만, 저처럼 잘못이해해서 헷갈려하는 분들도 분명히 있을 거 같아서 정리하는 겁니다. 자, 이제 이걸 응용한 코드를 보겠습니다. 

if 'Hello':
    print('참')    # 문자열은 참
else:
    print('거짓')
    
if '':
    print('참')
else:
    print('거짓')    # 빈 문자열은 거짓
 

참 

거짓 

 

 

(위 코드에서 0 과 '' 은 False로 취급됨을 확인합시다. )

 

 

값 자체가 있으면 if는 동작합니다. 반대로 0, None, ''은 False로 취급하므로 else가 동작합니다.

 

자, 이제 본 내용에 들어가보죠.

 

우선, if 문은 "조건문+실행문" 으로 구조화 해서 이해할 필요가 있습니다. if 문이 True 이어야 그 밑에 따린 '실행문'이 작동합니다. 위 코드들을 쭉 보면 else 의 '실행문' 이 작동하려면 조건문의 bool 값이 False 이어야 합니다. 

 

즉, if 문의 실행문은 조건문이 true 일때만 작동합니다. 여기서 우리는 조건문을 bool 값으로 생각해줘야 합니다.

 

bool(인자)

 

해주면 true 나 False 를 Return 합니다. 이 관점에서 조건문을 보셔야 하고, if not  에서는 'not +조건문'을 bool 값으로 생각해줘야 합니다. 

 

if not

 

 

if not 0:
    print('참')
    
if not None:
    print('참')

if not '':
    print('참')

 

 

자, 위의 if not 코드들은 모두 '참'이 print 됩니다. 

아까 if 는 true 여야만 if 밑에 딸린 실행문이 실행됩니다. 

 

not 0

not None

not '' 

 

모두 true 입니다. 

 

"if" 와 "not 조건문" 을 구분해서 보셔야 합니다. 

저도 처음에 같이 결합해서 "if not 조건" 으로 보다보니 이 부분이 좀 헷갈렸습니다. 

"조건문을 만족하면 실행된다" 라고 이해를 했었는데 이러면 " not 때문에 false 일 때 if 문의 실행문이 동작하는구나 " 와 같은 식으로 생각했는데 이게 좀 애매한 이해입니다.

 

물론 이걸 자연스럽게 이해하는 분도 있을 겁니다. 하지만, 저처럼 잘못 이해해서 헷갈려하는 분들도 분명히 있을 거 같아서 정리하는 겁니다. 자, 이제 이걸 응용한 코드를 보겠습니다. 

 

 

 

def outer_check(type_code):
    def type_check(a):
        return isinstance(a, type_code) # return bool 
    
    def inner_(x,y):
        if not type_check(x): # 매개변수가 type_code에 속하지 않으면 실행문(type_code로 타입변환)이 실행된다. 
            x = type_code(x)
        if not type_check(y):
            y = type_code(y)
        return x+y
    
    return inner_

 

 

 

자, 외부 함수 안에 내부함수를 만들어 보았고 2번째 내부함수 inner_ 에 if not 구문이 들어있습니다. 

isinstance 구문은 잘 아실 겁니다. 1번째 인자가 2번째 인자의 instance 이면 true , 아니면 false 입니다. 관계에 대한 참거짓 유무를 bool 값으로return 해주는 기초적인 메소드이죠. 

 

이제 위 함수를 동작시키는 코드를 볼게요. 

 

 

 

 

 

 

 

외부 함수를 인스턴스화 하면 내부 함수가 나와있을테니 inner_ 함수의 매개변수는 2개가 필요하닌 2개 숫자 넣어주면 잘 작동합니다. 여기서 인자 '1.1' 을 한 번 보죠. '1.1' 은 float 타입입니다. type_check 함수에 들어갔을 때 bool 이 나오겠죠? (int 기준입니다.) 

 

if not type_check(1.1)  

 

의 bool값은 뭐죠?  

 

true 입니다. not false = true 당연한거죠? 

 

if not 조건문 에서 

 

not 조건문 = True  이므로 그 밑에 따린 x = type_code(x) 가 작동합니다. 정확히 표현하자면 x = int(1.1) 입니다. 

혹시 어? 할당되는건 1.1 아니야? 라고 생각할 수 있을까봐 말하자면 callable  안에 들어간 x,y 와 inner_ 함수 안에서 할당되는 x , y 는 다릅니다. id 로 레퍼런스 찍어보면 다르게 나올겁니다. 

 

그렇다면 if not 조건문 밑에 있는 실행문에서 할당되는 x,y 의 변수명을 다른 기호(a,b, ...등)로 쓰면 어떻게 될까요? 

그러면 unboundlocalerror 가 납니다 ㅎㅎ 변수명은 같지만 실제 레퍼런스는 다르게 되는 위와 같은 형태를 써줘야합니다. 

 

 

 

 

 

한 번 다르게 해서 레퍼런스를 찍어보시면 이해가 더 잘 될겁니다! 

 

 

이상 if not 이해하기 포스팅을 마치겠습니다 :)

 

 

 

참고 

 

dojang.io/mod/page/view.php?id=1256

 

COS Pro 2급 파이썬: 13.3 if 조건문의 동작 방식 알아보기

비어 있는 문자열, 리스트, 튜플, 세트: '', "", [], (), set()

dojang.io

thecoollife.tistory.com/20

 

[파이썬, Python] if not x

[파이썬, python] if not x 출처: http://lilypad.egloos.com/669276 if not x 의 조건에 들어맞는 x는 다음과 같다. 1) False 2) 0 3) 빈 리스트 [] 4) 빈 튜플 () 5) 빈 딕셔너리 {} 6) 문자길이 0의 문자열 "..

thecoollife.tistory.com

hsd0937.tistory.com/21

 

[Python] 조건문 if문 - if, elif, and, or, if not

Python 조건문 if 예제 입니다. 해당 조건에 맞는 실행문을 실행시킬때 사용됩니다. # if 문 첫번째 조건은 if , 두번째 조건은 elif, 나머지는 else로 표현됩니다. 하나의 if문에 두가지 조건이 필요한

hsd0937.tistory.com