Python 코드를 읽고 쓰기 위해서는 먼저 어떤 값을 어떤 자료형으로 표현하는지 이해해야 한다.
숫자를 계산할 때와 사용자 목록을 관리할 때, API 응답을 저장할 때 필요한 자료구조는 서로 다르다.
intuser_count = 120
retry_count = 3
temperature = -3
Python의 정수는 매우 큰 값도 별도의 long 타입 없이 다룰 수 있다.
big_number = 10 ** 100
floatconversion_rate = 2.75
temperature = 21.5
value = 1.2e3
binary_value = 0b1010
octal_value = 0o12
hex_value = 0xFF
색상 값, 파일 권한, 비트 연산 등을 다룰 때 볼 수 있다.
a = 13
b = 5
| 연산자 | 의미 |
|---|---|
+ | 덧셈 |
- | 뺄셈 |
* | 곱셈 |
/ | 일반 나눗셈 |
// | 버림 나눗셈 |
% | 나머지 |
** | 거듭제곱 |
print(a / b)
print(a // b)
print(a % b)
print(a ** b)
/는 실수 결과를 반환하고, //는 버림 나눗셈 결과를 반환한다.
7 / 4
1.75
7 // 4
1
짝수 여부는 나머지 연산으로 확인할 수 있다.
number = 12
if number % 2 == 0:
print("짝수")
strservice_name = "My API"
message = 'Hello'
여러 줄 문자열:
email_body = """
안녕하세요.
가입이 완료되었습니다.
서비스를 이용해 주세요.
"""
text = "Python"
print(text[0])
print(text[-1])
P
n
print(text[0:3])
print(text[:2])
print(text[2:])
print(text[::-1])
문자열은 변경 불가능한 객체다.
# 오류
text[0] = "J"
새 문자열을 만들어야 한다.
text = "J" + text[1:]
name = "kim"
score = 92
print(
f"{name}님의 점수는 "
f"{score}점입니다."
)
천 단위 쉼표:
price = 1250000
print(f"{price:,}원")
퍼센트:
rate = 0.12345
print(f"{rate:.2%}")
text = " Python API "
text.strip()
text.upper()
text.lower()
text.find("API")
포함 여부만 확인한다면 in이 읽기 쉽다.
if "API" in text:
print("API 문자열 포함")
문자열 나누기:
skills = (
"python,sql,fastapi"
.split(",")
)
문자열 합치기:
skills = [
"python",
"sql",
"fastapi",
]
text = ", ".join(skills)
list순서가 있고 수정 가능한 여러 값을 저장한다.
users = [
"kim",
"lee",
"park",
]
users.append("choi")
users.extend(["jung", "han"])
users.insert(1, "seo")
users.remove("lee")
removed = users.pop()
정렬:
scores = [95, 70, 88]
scores.sort()
sorted_scores = sorted(
scores
)
sort()는 원본을 변경하고 sorted()는 새 리스트를 반환한다.
tuple튜플은 순서가 있지만 값을 변경할 수 없다.
coordinate = (
37.5,
127.0,
)
latitude, longitude = (
coordinate
)
함수에서 여러 값을 반환할 때도 자주 사용된다.
def get_range():
return 10, 20
minimum, maximum = (
get_range()
)
dict키와 값을 연결해서 저장한다.
user = {
"id": 101,
"name": "kim",
"role": "admin",
}
print(user["name"])
user["email"] = (
"kim@example.com"
)
user["role"] = "editor"
키가 없을 가능성이 있다면 get()을 사용할 수 있다.
email = user.get(
"email",
"없음",
)
반복:
for key, value in user.items():
print(
key,
value,
)
API JSON 데이터는 리스트와 딕셔너리의 조합으로 다루는 경우가 많다.
response_data = {
"users": [
{
"id": 1,
"name": "kim",
},
{
"id": 2,
"name": "lee",
},
]
}
set집합은 중복된 값을 허용하지 않는다.
tags = {
"python",
"backend",
"python",
}
리스트 중복 제거:
user_ids = [
1,
1,
2,
3,
3,
]
unique_ids = set(
user_ids
)
집합 연산:
admin = {
"read",
"write",
"delete",
}
editor = {
"read",
"write",
}
admin & editor
admin | editor
admin - editor
editor.issubset(admin)
boolis_logged_in = True
is_admin = False
Python에서는 다음 값들이 거짓으로 평가된다.
False
None
0
0.0
""
[]
{}
set()
그래서 다음처럼 작성할 수 있다.
users = []
if not users:
print(
"사용자가 없습니다."
)
original = [
"python",
"sql",
]
copied = original
copied.append("ai")
print(original)
['python', 'sql', 'ai']
copied = original은 리스트를 복사한 것이 아니라 같은 객체를 가리킨다.
별도의 리스트가 필요하다면:
copied = original.copy()
중첩 구조까지 독립적으로 복사해야 한다면:
import copy
copied = copy.deepcopy(
original
)
| 상황 | 추천 자료형 |
|---|---|
| 순서가 있고 수정이 많음 | list |
| 순서가 있지만 값이 고정됨 | tuple |
| 이름으로 값을 조회 | dict |
| 중복 제거, 집합 연산 | set |
| 참/거짓 상태 | bool |
int와 float는 숫자를 표현하고 /, //, %, ** 등의 연산자를 사용할 수 있다.list는 순서가 있고 수정 가능한 컬렉션이다.tuple은 순서가 있지만 변경할 수 없어 고정 값 묶음에 적합하다.dict는 키와 값의 구조로 API 데이터나 객체 정보를 표현하기 좋다.set은 중복 제거와 집합 연산에 유용하다.