AI 헬스케어 3기 데이터 분석 코스 Python (4)
함수
제어문, 반복문
로직에 대해
기능을 묶어놓은 상자다
함수는 특정 작업을 수행하는 코드 블록으로, 재사용 가능하고 코드를
깔끔하게 정리할 수 있게 해줍니다
재사용성
자주 사용되는 기능
소수점
웹계발 시 단위 변환
함수로 만들어놓고 사용
정의와 호출하는 부분으로 되어 있음
함수 정의 : def 키워드를 사용하여 함수를 선언함
함수 호출 : 정의된 함수를 실행
함수 정의/선언
def greet_patient():
print("안녕하세요, 환자님!")
print("오늘 진료에 오신 것을 환영합니다.")
함수 호출/실행
greet_patient()
안녕하세요, 환자님!
오늘 진료에 오신 것을 환영합니다.
매개변수(Parameter)와 인수(Argument)
매개변수(Parameter) - 함수 정의 시 사용
매개변수는 함수를 정의할 때 입력값을 받기 위해
설정하는 변수입니다.
# name, age, department가 매개변수(Parameter)
def register_patient(name, age, department):
"""환자를 등록하는 함수 정의"""
print(f"환자 등록: {name}님 ({age}세)")
print(f"담당 과: {department}")
print("등록이 완료되었습니다.")
# height_cm, weight_kg가 매개변수(Parameter)
def calculate_bmi(height_cm, weight_kg):
"""BMI를 계산하는 함수 정의"""
bmi = weight_kg / (height_cm / 100) ** 2
return bmi
인수(Argument) - 함수 호출 시 사용
인수는 함수를 호출할 때 매개변수에
실제로 전달하는 값입니다
# "김환자", 45, "내과"는 인수(Argument)
register_patient("김환자", 45, "내과")
반환값(return)
return은 함수에서 계산된 결과값을 호출한 곳으로 돌려주거나,
함수의 실행을 중단시키는 역할을 합니다.
return은 반환받은 값을 다른 코드에 사용해야
할때 사용합니다.
1. 값 반환 - 함수 결과를 돌려주기
def calculate_bmi(height_cm, weight_kg):
"""BMI를 계산하여 반환합니다"""
bmi = weight_kg / (height_cm / 100) ** 2
return bmi
def classify_bmi_status(bmi):
"""BMI 값을 받아서 상태를 분류합니다"""
if bmi < 18.5:
return "저체중"
elif bmi < 25:
return "정상체중"
elif bmi < 30:
return "과체중"
else:
return "비만"
# return 값을 다른 함수에 활용
patient_bmi = calculate_bmi(170, 70) # BMI 계산
bmi_status = classify_bmi_status(patient_bmi) # 계산된 BMI로 상태 분류
print(f"BMI:{patient_bmi},status:{bmi_status}")
2. 함수 종료 - 실행 중단하기
def check_adult_patient(age):
"""환자가 성인인지 확인합니다"""
if age < 0:
print("잘못된 나이 정보입니다.")
return # 여기서 함수 종료 (값 반환 없음)
if age < 18:
print("미성년자입니다. 보호자 동반이 필요합니다.")
return # 여기서 함수 종료 (값 반환 없음)
print("성인 환자입니다.")
print("진료를 진행하겠습니다.")
check_adult_patient(-1)
잘못된 나이 정보입니다.
check_adult_patient(16)
미성년자입니다. 보호자 동반이 필요합니다.
check_adult_patient(25)
성인 환자입니다.
진료를 진행하겠습니다.
문제 3. 조건별 반환값 - 혈압 등급 분류
환자의 혈압을 입력받아 혈압 등급을 반환하는 함수를 작성하세요.
혈압 분류 기준
정상: 수축기 < 120
고혈압 전단계: 120 ≤ 수축기 < 140
1기 고혈압: 140 ≤ 수축기 < 160
2기 고혈압: 수축기 ≥ 160
여러개의 값 반환
함수에서 여러개의 값을 반환할때는 하나의 튜플로 묶여 반환됩니다.
# 환자 데이터베이스
patient_database = [
{"id": "P001", "name": "김환자", "temperature": 36.5, "pulse": 72, "systolic_bp": 120},
{"id": "P002", "name": "이환자", "temperature": 38.2, "pulse": 85, "systolic_bp": 140},
{"id": "P003", "name": "박환자", "temperature": 37.8, "pulse": 95, "systolic_bp": 160}
]
def get_vital_signs(patient_id):
"""환자 ID로 데이터베이스에서 바이탈 사인을 조회합니다"""
for patient in patient_database:
if patient["id"] == patient_id:
return patient["temperature"], patient["pulse"], patient["systolic_bp"] # 튜플로 반환
return None, None, None # 환자를 찾지 못한 경우
# 바이탈 사인 조회
temp, pulse, bp = get_vital_signs("P002")
print(f"체온: {temp}°C, 맥박: {pulse}bpm, 혈압: {bp}mmHg")
체온: 38.2°C, 맥박: 85bpm, 혈압: 140mmHg
Default Parameter - 기본값 설정
함수 호출 시 인수를 생략했을 때
자동으로 사용될 값을 미리 설정하는 방식입니다.
이는 함수 사용의 편의성을 높이고
코드 유연성을 향상시킵니다.
def schedule_appointment(patient_name, doctor="담당의 미정", time="시간 미정", room="진료실 미정"):
"""환자의 진료 예약을 등록하고 정보를 출력합니다 (기본값 제공)"""
print(f"{patient_name} 환자")
print(f"담당의: {doctor}")
print(f"진료 시간: {time}")
print(f"진료실: {room}")
# 다양한 호출 방법 가능
schedule_appointment("김환자")
김환자 환자
담당의: 담당의 미정
진료 시간: 시간 미정
진료실: 진료실 미정
schedule_appointment("최환자", "정외과", "15:30", "205호")
최환자 환자
담당의: 정외과
진료 시간: 15:30
진료실: 205호
Keyword Arguments - 이름(키워드)으로 전달
키워드 인수는 매개변수 이름을 지정하여 순서에 상관없이 인수를 전달하는 방법입니다.
함수 호출의 가독성을 높이고 매개변수가 많은 함수를 안전하게 사용할 수 있게 합니다.
def create_prescription(patient_name, medicine, dosage, frequency):
"""환자의 처방전을 생성하고 정보를 출력합니다"""
print(f"처방전 - 환자: {patient_name}")
print(f"약물: {medicine}")
print(f"용량: {dosage}")
print(f"복용 횟수: {frequency}")
# 순서 상관없이 호출 가능
create_prescription(
frequency="1일 3회",
patient_name="김환자",
dosage="500mg",
medicine="아스피린"
)
처방전 - 환자: 김환자
약물: 아스피린
용량: 500mg
복용 횟수: 1일 3회
# 일부는 위치, 일부는 키워드로
# 주의: 키워드 인수 사용 시작 후부터는 모든 인수를 키워드로 명시해야 함
create_prescription("이환자", "타이레놀", dosage="250mg", frequency="1일 2회")
처방전 - 환자: 이환자
약물: 타이레놀
용량: 250mg
복용 횟수: 1일 2회
def create_prescription(patient_name, medicine, dosage="적정량", frequency="1일 3회", duration="7일"):
# 여기에 함수를 작성하세요
# 코드 작성
prescription = f"""
처방전
================
환자명: {patient_name}
약물명: {medicine}
용량: {dosage}
복용법: {frequency}
처방 기간: {duration}
================
"""
return prescription.strip()
# 테스트 함수 실행 (다양한 방식으로 호출)
result1 = create_prescription("김환자", "아스피린")
print(result1)
print("\n" + "="*30 + "\n")
result2 = create_prescription("이환자", "타이레놀", dosage="500mg", duration="5일")
print(result2)
처방전
================
환자명: 김환자
약물명: 아스피린
용량: 적정량
복용법: 1일 3회
처방 기간: 7일
================
==============================
처방전
================
환자명: 이환자
약물명: 타이레놀
용량: 500mg
복용법: 1일 3회
처방 기간: 5일
================
단일 책임 원칙 (하나의 기능만)
하나의 함수는 하나의 일만 해야 합니다.
의미 있는 함수명
함수명만 봐도 무엇을 하는지 알 수 있어야 합니다.
타입 힌팅 (Type Hints)
함수의 입력과 출력 타입을 명시하여 코드의 가독성과 안정성을 높이는 방법입니다.
복합 타입 힌팅
# 리스트 타입
def calculate_average_temperature(temperatures: list[float]) -> float:
"""체온 리스트의 평균을 계산합니다"""
return sum(temperatures) / len(temperatures)
# 딕셔너리 타입
def create_patient_record(name: str, age: int) -> dict[str, any]:
"""환자 기록을 생성합니다"""
return {
"name": name,
"age": age,
"registration_date": "2024-01-01"
}
# 튜플 타입 (여러 값 반환)
def get_vital_signs(patient_id: str) -> tuple[float, int, float]:
"""환자의 바이탈 사인을 조회합니다 (체온, 맥박, 혈압)"""
return 36.5, 72, 120.0
# Union 타입 (None일 수도 있는 값) - Python 3.10+
def find_patient_by_id(patient_id: str) -> dict[str, any] | None:
"""환자 ID로 환자를 검색합니다 (없으면 None 반환)"""
# 검색 로직
if patient_id == "P001":
return {"name": "김환자", "age": 45}
return None # 환자를 찾지 못한 경우



댓글
댓글 쓰기