연산자에서 주의할 점
만약 논리 연산자 왼쪽 값으로 연산의 결과가 결정될때, python은 논리연산자 오른쪽의 값을 계산하지 않는다.
False and ...
인 경우나True or ...
인 경우
가령 변수 a와 함수 f()를 정의해보자
a = 10
def f():
global a
a = 0
return True
True or f()
이때 결과 값은 True가 나온다. 하지만 함수 f()는 실행되지 않으므로 a의 값은 여전히 10으로 남아 있는다.
반면,
a = 10
def f():
global a
a = 0
return True
f() or True
이렇게 실행한 경우에는 함수 f()가 실행되므로 a의 값이 0으로 바뀌게 된다.
문제
a = 10
def foo() :
global a
a = a + 5
return False
if foo() and foo(): # foo()가 실행되었으므로 a = 15
a = a + 5
if True or foo(): # or연산자이므로 뒤에 있는 foo()가 또 실행되므로
# a = 20이 된다.
a = a + 5
print(a) # 따라서 결과값은 20
출처
반응형
'파이썬 문법' 카테고리의 다른 글
RuntimeError: can't allocate lock 에러 (feat.병렬처리) (0) | 2022.07.11 |
---|---|
파이썬 리스트에 요소 추가 시 주의하기 (feat.속도) (0) | 2022.07.02 |
변수(Variable) (0) | 2019.09.03 |
비트연산자와 논리연산자 (0) | 2019.08.18 |
쥬피터 노트북 기능 (0) | 2019.08.18 |