2025. 10. 27. 21:06ㆍTIL
1. Python - 함수(Function)
이전 포스트에서 조건문과 반복문에 대해 다루었는데, 특정한 범위 내에서 행동을 반복하기 위해 사용하는 것이 반복문이라고 하였다. (반복 가능한 데이터셋(for), 특정 조건에 도달할 때까지 반복(while))
그러면 특정한 기능을 계속 사용해야 한다면 어떨까?
그때마다 코드를 작성하는 것보다는 하나의 기능을 수행하는 코드블록을 만들고, 필요할 때마다 꺼내 한 줄로 간결하게 쓸 수 있다면 가독성도 좋아지고, 기능이 바뀔 때 모든 코드를 일일히 다 수정할 필요도 없고, 관리하기 더 편해질 것이다.
그런 기능을 제공하는 것이 바로 Python의 함수이다.
1) 함수의 정의와 호출 방법
#함수의 정의 방법
def function_name(매개변수1, 매개변수2, ...):
code_block(함수 내에서 수행할 작업)
return result
#함수의 호출 방법
function_name(인수1, 인수2, ...)
매개변수(Parameter) : 함수를 정의할 때 함수가 받아들이는 값.
인수(Argument) : 함수를 호출할 때 함수에 전달하는 값.
return : 함수가 반환하는 결과값. (없을 수도 있다.)
2) 간단한 함수의 예시 (숫자 리스트의 평균을 계산하는 함수)
def mean_calculator(numbers):
result = sum(numbers) / len(numbers)
return result
number_list = [10, 12, 14, 16, 18]
mean = mean_calculator(number_list)
print(mean)
#출력값 : 14.0
3) 지역변수와 전역변수
Python에서 변수는 프로그램 전체에서 사용 가능한지, 함수와 같이 특정 범위에서 사용 가능한지에 따라 지역변수와 전역변수로 나눌 수 있다.
제주도 사투리(지역변수)를 제주도 내에서는 다 알아듣지만 나머지 국민은 못 알아듣고, 표준말(전역변수)은 전국민이 알아듣는 것처럼 말이다. (비유가 적절한 건지 모르겠다.)
| 전역변수(Global variable) | 프로그램 전체에서 접근 가능한 변수. 함수 내부를 포함해 모든 지역에서 사용할 수 있다. 많은 지역에서 공통적으로 사용되는 값을 저장한다. 전역변수가 많아지면 코드 로딩이 느려지고 메모리를 많이 잡아먹는다. (전역변수는 항상 메모리에 저장되어 있기 때문이다.) |
| 지역변수(Local variable) | 특정한 범위 내(ex. 함수)에서만 접근 가능한 변수. 지역변수를 지정한 범위 내에서만 사용 가능하며, 범위를 벗어나면 메모리에서 삭제된다. 메모리 휘발성이 있기 때문에 메모리 관리에 효율적이다. |
global_var = 10 #전역변수
def function():
local_var = 20 #지역변수
print(global_var) # 20
print(local_var) #에러 : local_var는 function 함수 내에서만 사용 가능
만약 함수 내에서 지역변수를 수정해야 한다면,
global_var = 10
print(global_var)
def how_to_use_global_var():
global global_var
global_var = 20
how_to_use_global_var()
print(global_var)
#출력값
#10
#20
global 키워드를 이용해 함수 내에서 원하는 전역변수를 수정할 수 있다.
4) 위치 인수, 키워드 인수, 기본값 설정
함수에 인수를 전달할 때는 별다른 설명이 없으면 매개변수의 위치에 기반해 전달하고,
특정 매개변수에 넣을 값을 지정할 수도 있다.
또한 함수 자체에 기본값을 설정해, 인수가 없더라도 값을 출력하도록 할 수 있다.
def substraction(a, b):
result = a - b
return result
#위치 인수
result = substraction(7, 3)
print(result)
#4
result = substraction(3, 7)
print(result)
#-4
#키워드 인수
result = substraction(a=7, b=3)
print(result)
#7
#기본값 설정
def substraction(a=7, b=3):
result = a - b
return result
result = substraction()
print(result)
#7
위치 인수는 매개변수 위치에 근거해 인수를 전달하기 때문에, 순서가 바뀌면 값도 바뀐다.
키워드 인수는 매개변수를 지정해 인수를 전달하기 때문에, 순서와 관련 없이 동일한 결과를 낸다.
(함수의 매개변수가 많을 경우 키워드 인수를 사용하는 것이 혼란을 줄일 수 있을 것 같다.)
기본값 설정은 함수의 매개변수에 아무 값도 전달되지 않더라도 기본값을 사용할 수 있도록 한다.
5) 가변 인수(Variable-length arguments)
함수를 정의할 때 매개변수를 정확히 몇 개로 설정할 수 없는 경우가 있다.
그럴 때 사용할 수 있는 것이 가변 인수이다.
def sum_values(*args):
total = 0
for num in args:
total += num
return total
result = sum_values(1, 2, 3)
print("합계:", result)
#6
args는 함수를 호출할 때 임의의 개수의 위치 인수를 전달받을 수 있다.
def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_info(name="Max", age=28, country="Netherland")
#name: Max
#age : 28
#country : Netherland
kwargs는 임의의 개수의 키워드 인수를 전달받을 수 있다.
2. SQL
SELECT, FROM, WHERE, CASE WHEN, ORDER BY를 이해하고 다음 query들을 작성해 보았다.
1) WHERE 활용 기초
select game_account_id, game_actor_id, serverno
from basic.users
where first_login_date > '2023-01-01'
;
2) WHERE 활용 - 여러 조건 사용
select first_login_date, ip_addr, exp, zone_id
from basic.users
where level > 10
and (serverno != 1)
and (etc_str2 in ('레벨업 패키지', '시즌패스'))
and (etc_str1 like '%상점%')
order by first_login_date desc
;
3) CASE WHEN 활용
select game_actor_id, level,
case when level > 90 then '91~100Lv'
when level > 80 then '81~90Lv 이하'
when level > 70 then '71~80Lv 이하'
when level > 60 then '61~70Lv 이하'
when level > 50 then '51~60Lv 이하'
when level > 40 then '41~50Lv 이하'
when level > 30 then '31~40Lv 이하'
when level > 20 then '21~30Lv 이하'
when level > 10 then '11~20Lv 이하'
else '1~10Lv 이하'
end as levelgroup,
first_login_date
from basic.users
order by first_login_date desc
;
CASE WHEN은 "맨 위의 조건부터 처리하고, 그 값은 아래 조건 부여 과정에서는 제외한다."는 작동 원리를 가진다.
위 쿼리에서 level > 90을 했으면, 90 초과인 값들은 '91~100Lv'라는 값(속성값)이 주어졌고, 아래 조건부터는 포함되지 않는다.(또 값을 줄 필요가 없기 때문)

'TIL' 카테고리의 다른 글
| 251029_BootCamp Day 8_SQL 코딩테스트 문제 (0) | 2025.10.29 |
|---|---|
| 251028_BootCamp Day 7_SQL 날짜 & 서브쿼리 (1) | 2025.10.28 |
| 251024_BootCamp Day 5_Python 조건문, 반복문 (1) | 2025.10.24 |
| 251023_BootCamp Day 4_데이터 리터러시 2 (0) | 2025.10.23 |
| 251022_BootCamp Day 3_데이터 리터러시_1 (0) | 2025.10.22 |