이번 학습에서는 Python의 형변환, 연산자, 조건문, 반복문, 컴프리헨션, 함수, 람다, 내장 함수를 정리했다.
이전에는 자료형 자체를 학습했다면, 이번에는 그 자료형을 실제 코드 흐름 안에서 어떻게 다루는지에 가까운 내용이었다.
1. 형변환
형변환은 값의 자료형을 다른 자료형으로 바꾸는 것이다.
Python에서는 일부 연산에서 자동 형변환이 일어난다.
print(3 + 1.23) # int + float -> float
print(3 + True) # True는 1처럼 처리
하지만 문자열 숫자는 자동으로 숫자가 되지 않는다.
# print(3 + "5") # TypeError
print(3 + int("5"))
input()은 기본적으로 문자열을 반환하므로 숫자 계산에 사용하려면 형변환이 필요하다.
score = int(input("점수 입력: "))
자료형끼리도 변환할 수 있다.
list((1, 2, 3)) # tuple -> list
tuple([1, 2, 3]) # list -> tuple
set([1, 2, 2, 3]) # list -> set, 중복 제거
dict([("a", 100), ("b", 200)])
dict를 list로 바꾸면 기본적으로 key만 리스트로 변환된다.
list({"a": 100, "b": 200}) # ['a', 'b']
2. 연산자와 삼항 연산자
Python의 삼항 연산자는 Java나 JavaScript와 문법이 다르다.
참일_때_값 if 조건식 else 거짓일_때_값
예시는 다음과 같다.
num = int(input("정수 입력: "))
result = "홀수" if num % 2 == 1 else "짝수"
print(result)
두 수 중 큰 값과 작은 값을 구할 때도 사용할 수 있다.
big = a if a > b else b
small = a if a < b else b
단순 조건에는 삼항 연산자가 편하지만, 조건이 길어지면 일반 if문이 더 읽기 좋다.
3. 조건문
조건문은 조건에 따라 실행할 코드를 나누는 문법이다.
| 형태 | 사용 상황 |
| if | 조건이 맞을 때만 실행 |
| if else | 참/거짓 둘 중 하나 실행 |
| if elif else | 여러 조건 중 하나 선택 |
Python은 비교식을 자연스럽게 이어서 쓸 수 있다.
score = int(input("시험 점수: "))
if 0 <= score <= 100:
if score >= 60:
print("합격")
else:
print("불합격")
else:
print("유효하지 않은 점수")
여러 조건을 비교할 때는 elif를 사용한다.
if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 70:
grade = "C"
else:
grade = "F"
4. 반복문
Python의 반복문은 대표적으로 for와 while이 있다.
for문은 반복 가능한 객체를 순회할 때 사용한다.
for fruit in ["apple", "banana", "orange"]:
print(fruit)
문자열도 반복 가능하다.
for ch in "Python":
print(ch)
반복 횟수가 정해져 있을 때는 range()를 자주 사용한다.
for i in range(0, 10, 3):
print(i)
range(start, end, step) 구조이고, end 값은 포함되지 않는다.
while문은 조건이 참인 동안 계속 반복한다.
i = 0
while i < 3:
print(i)
i += 1
반복을 중간에 끝내고 싶을 때는 break를 사용한다.
while True:
text = input("입력: ")
if text == "exit":
break
5. Comprehension
Comprehension은 반복문을 짧게 작성해서 리스트나 딕셔너리를 만드는 문법이다.
일반 반복문으로 리스트를 만들면 다음과 같다.
result = []
for n in range(1, 6):
result.append(n * 2)
list comprehension으로 쓰면 더 간단하다.
result = [n * 2 for n in range(1, 6)]
조건도 함께 넣을 수 있다.
evens = [n for n in range(1, 11) if n % 2 == 0]
dict comprehension도 가능하다.
students = ["kim", "lee", "park"]
scores = [90, 80, 70]
score_map = {name: score for name, score in zip(students, scores)}
간단한 변환이나 필터링에는 유용하지만, 로직이 복잡하면 일반 반복문이 더 적합하다.
6. 함수
함수는 특정 작업을 재사용할 수 있도록 묶은 코드 블록이다.
def add(a, b):
return a + b
함수 선언부에서 받는 이름은 parameter, 호출할 때 전달하는 값은 argument라고 한다.
def bar(k, m): # k, m은 parameter
return k + m
bar(10, 20) # 10, 20은 argument
return은 함수의 결과값을 호출한 쪽으로 돌려준다.
return이 없으면 기본적으로 None을 반환한다.
def foo():
return 100
result = foo()
기본값 매개변수도 사용할 수 있다.
def print_info(name, age, has_married=True):
print(name, age, has_married)
*args는 여러 위치 인자를 tuple로 받는다.
def accept(*args):
print(args)
accept(1, 2, 3)
**kwargs는 여러 키워드 인자를 dict로 받는다.
def spec(**kwargs):
print(kwargs)
spec(width=300, height=700)
7. 함수가 일급 객체라는 의미
Python에서 함수는 값처럼 다룰 수 있다.
이것을 함수가 일급 객체라고 한다.
함수를 변수에 담을 수 있다.
def foo():
print("foo")
doo = foo
doo()
함수를 다른 함수의 인자로 전달할 수도 있다.
def runner(f):
f()
runner(foo)
함수 안에서 함수를 만들어 반환할 수도 있다.
def get_func():
def bar():
print("bar")
return bar
f = get_func()
f()
이 개념은 map, filter, lambda, decorator 같은 문법을 이해할 때 중요하다.
8. Lambda
lambda는 이름 없는 짧은 함수를 만들 때 사용한다.
lambda 매개변수: 반환값
일반 함수는 다음처럼 작성한다.
def square(x):
return x ** 2
lambda로 쓰면 다음과 같다.
square = lambda x: x ** 2
기본값이나 여러 인자도 사용할 수 있다.
add = lambda a, b=3: a + b
adder = lambda *args: sum(args)
lambda는 짧은 계산식에 적합하다.
로직이 길거나 조건이 복잡하면 def로 함수명을 붙이는 편이 더 낫다.
9. Built-in 함수
Python에는 별도 import 없이 바로 사용할 수 있는 내장 함수가 많다.
이번에는 map, filter, reduce 흐름을 중심으로 정리했다.
map
map()은 iterable의 각 요소에 함수를 적용한다.
texts = ["hello", "python", "ai"]
lengths = list(map(len, texts))
lambda와 함께 사용할 수도 있다.
lengths = list(map(lambda x: len(x), texts))
여러 iterable을 함께 넘길 수도 있다.
mid_terms = [80, 90]
final_terms = [100, 70]
averages = list(map(lambda mid, final: (mid + final) / 2, mid_terms, final_terms))
즉, map은 각 요소를 다른 값으로 변환할 때 사용한다.
filter
filter()는 조건을 만족하는 값만 남긴다.
nums = [1, 2, 3, 4, 5, 6]
evens = list(filter(lambda x: x % 2 == 0, nums))
즉, filter는 걸러내기 용도다.
reduce
reduce()는 여러 값을 하나의 결과로 누적한다.
Python에서는 functools에서 가져와 사용한다.
from functools import reduce
nums = [1, 2, 3, 4]
total = reduce(lambda acc, current: acc + current, nums, 0)
여기서 acc는 누적값이고, current는 현재 처리 중인 값이다.
이번에 추가로 reduce()를 이용해 최대값을 구하는 흐름도 확인했다.
from functools import reduce
numbers = [23, 5, 6, 100, 399, 342, -102, 435, 12]
max_num = reduce(lambda a, b: a if a > b else b, numbers)
print(max_num)
동작 흐름은 다음과 같다.
23과 5 비교 -> 23 유지
23과 6 비교 -> 23 유지
23과 100 비교 -> 100 변경
100과 399 비교 -> 399 변경
399와 342 비교 -> 399 유지
399와 -102 비교 -> 399 유지
399와 435 비교 -> 435 변경
435와 12 비교 -> 435 유지
결과적으로 가장 큰 값인 435가 남는다.
직접 함수로 풀어 쓰면 reduce의 흐름을 더 쉽게 볼 수 있다.
def op(a, b):
print(f"{a=}, {b=} : max = {a if a > b else b}")
return a if a > b else b
max_num = reduce(op, numbers)
다만 단순 최대값은 실무에서는 reduce()보다 max()가 더 간단하다.
max(numbers)
즉, reduce()는 누적 처리 원리를 이해하는 데 중요하지만, 이미 내장 함수가 있는 경우에는 sum(), max(), min()을 먼저 쓰는 편이 좋다.
10. 핵심 정리
- input()은 문자열을 반환하므로 숫자 계산 전 형변환이 필요하다.
- int(), float(), str(), list(), tuple(), set(), dict()로 자료형을 바꿀 수 있다.
- Python의 삼항 연산자는 값1 if 조건 else 값2 형태다.
- 조건문은 if, if else, if elif else로 상황을 나눠 처리한다.
- for문은 iterable 순회에 사용하고, range()와 자주 함께 쓴다.
- while문은 조건이 참인 동안 반복하며, break로 중단할 수 있다.
- comprehension은 반복으로 리스트나 딕셔너리를 간결하게 만들 때 사용한다.
- 함수는 def로 선언하고, return으로 결과를 반환한다.
- *args는 여러 위치 인자를 tuple로 받고, **kwargs는 여러 키워드 인자를 dict로 받는다.
- Python에서 함수는 일급 객체라 변수에 담거나 인자로 전달할 수 있다.
- lambda는 짧은 익명 함수가 필요할 때 사용한다.
- map은 변환, filter는 필터링, reduce는 누적 처리에 사용한다.
- 단순 합계나 최대/최소는 reduce()보다 sum(), max(), min()을 먼저 고려하는 것이 좋다.
'TIL > [TIL]' 카테고리의 다른 글
| [TIL]NumPy 심화, 영화 추천 실습, GPT 기초 구조 (0) | 2026.07.16 |
|---|---|
| [TIL]Python OOP, 모듈, 파일 입출력, 예외 처리와 NumPy 입문 (1) | 2026.07.15 |
| [TIL]Python 개발 환경과 기본 자료형 (0) | 2026.07.13 |
| [TIL]코드 컨벤션 재정리와 AWS RDS 기반 DB 서버 확인 (0) | 2026.06.26 |
| [TIL]Spring Security에서 CQRS 적용과 사용자 조회 흐름 (0) | 2026.06.24 |