-
Notifications
You must be signed in to change notification settings - Fork 0
2.03. 내용정리: 3일차
흔한 찐따 edited this page Mar 15, 2022
·
1 revision
조건문이란 특정 조건을 만족시키는 경우를 나타낸 문법적인 요소이며, if
와 elif
, else
로 표현한다.
-
if
키워드를 단독으로 사용하는 경우
a = 1
b = 1
if a is b:
print('a is same to b.')
-
if
와else
를 같이 사용하는 경우
a = 1
b = 1
if a is b:
print('a is same to b.')
else:
print('a is not same to b.')
-
if
와elif
,else
를 같이 사용하는 경우-
if
문의 조건이 참일 경우에는if
문만 실행된다. -
if
문이 거짓일 경우에는elif
문의 조건이 참인지 확인한다. - 만약
elif
문이 참일 경우,else
문은 실행되지 않는다. -
if
문과elif
문이 모두 거짓일 경우, 최종적으로else
문이 실행된다. -
elif
문은 여러 번 사용할 수 있다.
-
a = 1
b = 1
c = 2
if a is b:
print('a is same to b.')
elif a is c:
print('a is same to c.')
elif a is not b:
print('a is not same to b.')
else:
print('a is not same to b and c.')
- 변수 선언시 조건식에 따라 값을 대입하는 경우
a = 1
b = 2 if a == 1 else 3
print('a:', a)
print('b:', b)
키워드 | 설명 |
---|---|
A is B | A와 B의 메모리 주소값이 같다면 참(True), 아니면 거짓(False) |
not A | A의 부정 표현 |
A and B | A와 B 모두 참이면 참, 아니면 거짓 |
A or B | A와 B 둘 중 하나만 참이어도 참, 둘 다 거짓이면 거짓 |
-
and
와or
키워드는 값이 없는 경우(None
타입일 경우 )에는 거짓이다.- 숫자 타입(정수, 실수, 복소수)은 값이
0
일 경우 거짓 - 리스트 타입은
[]
, 튜플 타입은()
, 집합 타입은set()
, 불변집합 타입은frozenset()
, 딕셔너리 타입은{}
일 경우 거짓
- 숫자 타입(정수, 실수, 복소수)은 값이
-
is
키워드는 메모리 주소(memory address)를 비교하는 키워드이다.- 메모리는 컴퓨터 메모리 카드의 논리적 메모리(Logical memory)를 뜻하고 메모리 주소는 논리적 메모리의 고유 주소이다.
- 잘 이해가 안 가서 더 찾아보니까 메모리 주소는 간단히 말해 변수가 가지는 고유한 번호라고 생각하면 된다고 한다.
- 파이썬에서는
id
함수를 통해 메모리 주소를 확인할 수 있다. - 즉,
is
키워드는 변수의id
값이 같다면 참, 아니면 거짓이다. - 따라서 제대로 된 값을 비교하려면 아래의
연산자 기호
표에 나와있는 연산자 기호를 사용해서 비교해야 한다. - ex.
a = 1
b = 2
c = id(a)
d = id(b)
print('a memory address (id):', c)
print('b memory address (id):', d)
# a라는 변수의 주소값과 c라는 변수의 주소값을 비교하므로 이는 거짓
print('a is c:', a is c)
e = a
f = id(e)
print('e memory address:', f)
# e와 a의 주소값이 같으므로 이는 참
print('e is a:', e is a)
아래의 코드를 실행하면 계속 참이 나왔다.
a = 1
b = 1
c = id(a)
d = id(b)
# 주소값이 같음
print('a memory address:', c)
print('b memory address:', d)
# 참
print(a is b)
분명히 위의 설명대로라면 a
와 b
라는 변수는 다른 메모리 주소값을 가져야하지만 그렇지 않았다.
나는 왜 그런지 이유를 도저히 모르겠다.
그런데 밑의 코드는 또 결과가 다르게 나온다.
a = 1000
b = 1000
c = id(a)
d = id(b)
# 주소값이 다름
print('a memory address:', c)
print('b memory address:', d)
# 그래서 거짓이 나옴
print(a is b)
이게 왜 이러는 건지 몰라서 이 원인에 대해 구글링해서 찾아보았다.
컴퓨터 메모리는 구조가 굉장히 다양한데, 그 중 캐시 메모리(Cache memory)라는 것이 존재하며, 파이썬도 이 캐시 메모리라는 것을 사용한다.
파이썬에서는 -5
부터 256
까지의 정수는 캐시 메모리라는 것을 통해 메모리 주소를 공유하여 사용한다고 한다.
그래서 위의 주의사항 항목에서 비교 연산자를 사용해야 한다고 했던 것이었다.
기호 | 설명 |
---|---|
A == B | A와 B의 값이 같다면 참(True), 아니면 거짓(False) |
A != B | A와 B의 값이 다르다면 참, 아니면 거짓 |
A > B | A가 B보다 값이 크다면 참, 아니면 거짓 |
A < B | A가 B보다 값이 작다면 참, 아니면 거짓 |
A >= B | A가 B보다 값이 같거나 크다면 참, 아니면 거짓 |
A <= B | A가 B보다 값이 같거나 작다면 참, 아니면 거짓 |