-
Notifications
You must be signed in to change notification settings - Fork 1
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보다 값이 같거나 작다면 참, 아니면 거짓 |