데이터 분석 파이썬 종합반_4주차
⊙ 함수 기본 배우기
* 함수란?
함수는 입력을 받아 원하는 처리를 한 후 출력을 내보내는 일련의 작업을 수행하는 코드블록
프로그램 내에서 특정한 기능을 수행하기 위해 코드를 논리적으로 그룹화하여 재사용 가능한 형태로 정의한다.
* 함수의 필요성
코드의 재사용 : 반복되는 코드를 함수로 정의하여 여러 곳에서 재사용 할 수 있다.
모듈화 : 프로그램을 여러 개의 작은 묘둘로 나누어 개발, 관리할 수 있다.
유지 보수 용이성 : 함수는 각각의 기능을 독립적으로 정의하므로 수정이나 확장이 필요할 때 해당 함수만 수정하면 된다.
가독성 향상 : 함수는 코드의 의도를 명확하게 표현할 수 있으며 복잡한 작업을 함수로 분해하여 이해하기 쉽게 만든다.
def 함수이름(매개변수1, 매개변수2,...):
# 함수 내부에서 수행할 작업
return 결과값 # (선택적) 함수의 결과를 반환
def 키워드를 사용하여 함수를 정의한다.
함수 이름 뒤에 소괄호 안에 매개변수(입력값)을 정의한다.
함수 내부에서 필요한 작업을 수행한 후 return을 사용하여 결과값을 반환할 수 있다.
* 함수 호출
결과 = 함수이름(인수1, 인수2,...)
함수를 호출할 때는 함수 이름을 적고, 소괄호 안에 인수(함수에 전달할 값)를 넣어 호출한다.
필요에 따라 결과를 변수에 저장할 수 있다.
* 간단한 예시 코드
# 함수 정의
def greet(name):
message = "Hello, " + name + "!"
return message
# 함수 호출
greeting = greet("Alice")
print(greeting) # 출력 : Hello, Alice!
greet 라는 함수를 정의하여 이름을 전달하면 해당 이름과 함께 인사말을 반환하는 함수
함수를 호출하면 반환된 인사말을 출력한다.
* 간단한 계산의 함수 만들기 : 평균 계산 함수
def calculate_mean(numbers):
total = sum(numbers)
mean = total / len(numbers)
return mean
# 함수 호출 및 예시
data = [10, 20, 30, 40, 50]
average = calculate_mean(data)
print("평균:", average)
위 함수를 호출할 때는 숫자 리스트를 인수로 전달하면 된다.
* 다양한 함수 예시
- 숫자 리스트에서 최대값을 찾는 함수
def find_max(numbers):
max_num = numbers[0]
for num in numbers:
if num > max_num:
max_num = num
return max_num
# 함수 호출
print(find_max([3, 7, 2, 9, 5])) # 출력 : 9
- 튜플의 모든 요소를 곱하는 함수
def multiply_tuple(tup):
result = 1
for num in tup:
result *= num
return result
# 함수 호출
print(multiply_tuple((2, 3, 4))) # 출력 : 24
- 주어진 문자열에서 각 문자의 출현 빈도를 딕셔너리로 반환하는 함수
def char_frequency(string):
freq_dict = {}
for char in string:
if char in freq_dict:
freq_dict[char] += 1
else:
freq_dict[char] = 1
return freq_dict
# 함수 호출
print(char_frequency("hello")). # 출력 : {'h': 1, 'e': 1, 'l': 2, 'o': 1}
⊙ 함수 심화 배우기
* 전역변수와 지역변수의 차이
- 전역변수 (Global Variables)
전역변수는 프로그램 전체에서 접근 가능한 변수로, 어디서든지 사용할 수 있다.
프로그램이 시작될 때 생성되고, 프로그램이 종료될 때까지 메모리에 유지된다.
프로그램의 어디서든지 접근할 수 있으므로 여러 함수에서 공통적으로 사용되는 값을 저장할 때 유용하다.
너무 많은 전역변수를 사용하면 코드의 가독성이 떨어지고 디버깅이 어려워질 수 있다.
- 지역변수 (Local Variables)
지역변수는 특정한 범위(예 : 함수 내부)에서만 접근 가능한 변수로, 해당 범위를 벗어나면 사용할 수 없다.
해당 범위에서 생성되고 범위를 벗어나면 메모리에서 사라진다.
함수 내에서 정의된 변수는 해당 함수 내에서만 사용 가능한 지역변수이다.
지역변수는 함수 내에서만 사용되므로 해당 함수에서만 유효하고 다른 함수나 코드 블록에서는 사용할 수 없다.
지역변수는 함수가 실행될 때 생성되고, 함수가 종료되면 메모리에서 제거되므로 메모리 관료에 효율적이다.
- 예시 코드
# 전역변수 예시
global_var = 10
def global_example():
print("전역변수 접근:", global_var)
global_example() # 출력 : 전역변수 접근 : 10
# 지역변수 예시
def local_example():
local_var = 20
print("지역변수 접근:", local_var)
local_example() # 출력 : 지역변수 접근 : 20
# 함수 내에서 전역변수를 수정하는 예시
def modify_global():
global global_var
global_var = 30
print("함수 내에서 수정된 전역변수:". global_var)
modify_global(). # 출력 : 함수 내에서 수정된 전역변수 : 30
print("수정된 전역변수 확인:", global_var) # 출력 : 수정된 전역변수 확인 : 30
위 함수에서 global_var은 전역변수로 프로그램 어디서든지 접근 가능하다.
반면 local_var는 함수 local_example()내에서만 접근 가능한 지역변수이다.
함수 내에서 global 키워드를 사용하여 전역변수를 수정할 수 있다.
함수 내에서 전역변수를 수정하더라도, 해당 변수는 전역적으로 수정된다.
* 인수(전달인자, argument)와 매개변수(parameter)의 차이
함수를 정의할 때 매개변수와 함수를 호출할 때 전달되는 값 인수는 혼동하기 쉬운 개념
- 매개변수
함수를 정의할 때 함수가 받아들이는 값을 지정하는 변수
함수의 헤더 부분에서 매개변수가 정의되며 함수 내부에서 사용된다.
함수를 정의할 때 매개변수를 정의하고, 함수가 호출될 때 매개변수에 해당하는 값을 전달 받는다.
- 인수 (전달인자)
함수를 호출할 때 함수에 전달되는 값
함수를 호출할 때 전달되는 실제 값이며 함수를 호출할 때마다 다를 수 있다.
함수 호출 시 매개변수에 전달되는 값으로 해당 값은 내부에서 매개변수로 사용된다.
- 예시 코드
# 매개변수(parameter) 예시
def greet(name): # 여기서 'name'은 매개변수입니다.
print("Hello, " + name + "!")
# 함수 호출할 때 전달되는 값이 인수(argument)입니다.
greet("Alice") # 함수 호출 시 "Alice"는 greet 함수의 매개변수 'name'에 전달됩니다.
def add_numbers(x, y): # 'x'와 'y'는 매개변수입니다.
result = x + y
return result
# 함수 호출 시 10과 20이 각각 'x'와 'y' 매개변수에 전달됩니다.
sum_result = add_numbers(10, 20) # 10과 20이 전달인자(Argument)입니다.
print("Sum:", sum_result) # 출력: Sum: 30
함수 호출 시 전달되는 인자는 두 가지 유형이 있다.
위치 인수(positional argument)와 키워드 인수(keyword argument)이다.
* 위치 인수란? (positional arguments)
함수 정의에서 매개변수의 위치에 따라 전달되는 인수이다.
인자의 값이 함수의 매개변수에 순서대로 매핑된다.
함수 호출 시 위치 전달인수는 매개변수의 위치에 따라 전달된다.
def greet(name, age):
print("안녕하세요", name, "님! 나이는 ", age, "세입니다."
# 위치 전달인자 사용
greet("철수", 30). # 출력 : 안녕하세요, 철수님! 나이는 30세입니다.
위 예시에서는 "철수" name 매개변수에, 30이 age 매개변수에 순서대로 전달된다.
* 키워드 인수 (keyword arguments) 설정하기
함수를 호출할 때, 인수를 순서대로 전달하는 대신에 특정 매개변수에 값을 할당하여 전달할 수 있다. 이를 키워드 인수라고 한다.
def greet(name, age):
print("이름:", name)
print("나이:", age)
# 키워드 인수를 사용하여 함수 호출
greet(name="Alice", age=30) # 출력 : 이름 : Alice 나이 : 30
위 코드에서 greet 함수는 name과 age 두 개의 매개변수를 가진다. 함수를 호출할 때, 각 매개변수에 직접 값을 할당하여 전달하고 있다.
* 기본값 (Default Values) 설정하기
함수의 매개변수에 기본값을 설정할 수 있다. 이는 해당 매개변수에 인수가 전달되지 않았을 때 기본값으로 사용된다.
def greet(name="Guest", age = 25):
print("이름:", name)
print("나이:", age)
# 기본값이 설정된 함수 호출
greet() # 출력 : 이름 : Guest 나이 : 25
* 키워드 인수와 기본값을 함께 사용하기
def greet(name="Guest", age=25):
print("이름:", name)
print("나이:", age)
# 키워드 인수를 사용하여 함수 호출
greet(name="Alice", age=30) # 출력 : 이름 : Alice 나이 : 30
# 일부 매개변수에만 키워드 인수 사용하여 호출
greet(name="Bob") # 출력 : 이름 : Bob 나이 : 25
위 코드에서는 greet 함수를 호출할 때 키워드 인수를 사용하여 name 과 age 에 값을 전달하고 있다.
또한 일부 매개변수에만 키워드 인수를 사용하여 값을 전달할 수 있다.
함수의 매개변수에 기본값이 설정되어 있으면 해당 매개변수에 값을 전달하지 않아도 기본값이 사용된다.
* 가변인수 (variable length arguments) 활용하기
여러 개의 인수들을 받을 수 있는 함수를 만들기 위해서는 가변인수를 활용할 수 있다.
이를 위해 파이썬에서는 *args 와 **kwargs를 사용한다.
args : 함수를 호출할 때 임의의 개수의 위치 인수를 전달할 수 있도록 한다.
kwargs : 함수를 호출할 때 임의의 개수의 키워드 인수를 전달할 수 있도록 한다.
def sum_values(*args):
total = 0
for num in args:
total += num
return total
result = sum_values(1, 2, 3, 4, 5)
print("합계:", result) # 출력 : 합계 : 15
위의 함수 sum_values 는 임의의 개수의 위치 인수를 받아서 그 합계를 계산한다.
함수 내에서는 args라는 튜플로 위치 인수들을 받아 처리한다.
def print_info(**kwargs):
for key, value in kwargs.items():
print(key, value)
print_info(name="Alice", age=30, country="USA")
# 출력 : name Alice age 30 country USA
위 코드에서 print_info 함수는 임의의 개수의 키워드 인수를 받아서 그 정보를 출력한다.
함수 내에서는 kwargs라는 딕셔너리로 키워드 인수들을 받아 처리한다.
함수가 데이터 분석에서 사용되는 예시 - 노션 참고