함수
- 입력을 받아 원하는 처리를 한 후 출력을 내보내는 일련의 작업을 수행하는 코드
함수의 정의
def 함수이름(매개변수1, 매개변수2, ...):
# 함수 내부에서 수행할 작업
return 결과값 # (선택적) 함수의 결과를 반환
함수의 호출
# 함수 이름을 적고, 소괄호 안에 인수(함수에 전달할 값)를 넣어 호출
결과 = 함수이름(인수1, 인수2, ...)
함수의 필요성
- 코드 재사용: 반복되는 코드를 함수로 정의하여 여러 곳에서 재사용할 수 있습니다.
- 모듈화: 프로그램을 여러 개의 작은 모듈로 나누어 개발 및 관리할 수 있습니다.
- 유지 보수 용이성: 함수는 각각의 기능을 독립적으로 정의하므로, 수정이나 확장이 필요할 때 해당 함수만 수정하면 됩니다.
- 가독성 향상: 함수는 코드의 의도를 명확하게 표현할 수 있으며, 복잡한 작업을 함수로 분해하여 이해하기 쉽게 만듭니다.
예시 코드
# 함수 정의
def greet(name):
message = "Hello, " + name + "!"
return message
# 함수 호출
greeting = greet("Alice")
print(greeting) # 출력: Hello, Alice!
간단한 계산 함수 만들기
def calculate_mean(numbers):
"""
주어진 숫자 리스트의 평균을 계산하는 함수
Parameters:
numbers (list of int or float): 평균을 계산할 숫자들의 리스트
Returns:
float: 주어진 숫자 리스트의 평균값
"""
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}
함수 심화
1. 전역변수와 지역변수
전역변수 (Global Variables)
- 프로그램 전체에서 접근 가능한 변수, 어디서든 사용 가능
- 여러 함수에서 공통적으로 사용되는 값을 저장할 때 유용
- 너무 많은 전역변수는 가독성 떨어뜨리고 디버깅 어려움
- 함수 내에서는 `global` 키워드를 사용하여 전역변수를 수정할 수 있음
지역변수 (Local Variables)
- 특정한 범위(ex. 함수 내부)에서만 접근 가능한 변수, 해당 범위 벗어나면 사용 못 함
- 해당 함수에서만 유효하고 다른 함수나 코드 블록에서는 사용 못 함
- 메모리 관리에 효율적
# 전역변수 예시
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
2. 매개변수와 인수
매개변수(Parameter)
- 함수를 정의할 때 함수가 받아들이는 값을 지정하는 변수
- 함수의 헤더 부분에서 매개변수가 정의
- 함수를 정의할 때 매개변수를 정의하고, 함수가 호출될 때 매개변수에 해당하는 값을 전달받
인수(Argument)
- = 전달인자
- 함수를 호출할 때 함수에 전달되는 값
- 함수를 호출할 때마다 다를 수 있음
# 매개변수(parameter) 예시
def greet(name): # 여기서 'name'이 매개변수
print("Hello, " + name + "!")
# 인수(argument) 예시
# 함수 호출할 때 전달되는 값이 인수
greet("Alice")
# 함수 호출 시 인수 "Alice"가 greet 함수의 매개변수 'name'에 전달됩니다.
# 더 복잡한 예시
def add_numbers(x, y):
result = x + y
return result
sum_result = add_numbers(10, 20)
print("Sum:", sum_result) # 출력: Sum: 30
# 여기서 'x'와 'y'는 매개변수
# 함수 호출 시 10과 20이 각각 'x'와 'y' 매개변수에 전달되므로
# 10과 20이 전달인자(Argument)
3. 위치 인수
함수 호출 시 전달되는 인수는 두 종류 : 위치인수, 키워드인수
위치인수(Positional Arguments)
- 함수 정의에서 매개변수(parameter)의 위치에 따라 전달되는 인수
- 인자의 값이 함수의 매개변수에 순서대로 매핑됨
- 함수 호출 시 위치 전달인수는 매개변수의 위치에 따라 전달됨
def greet(name, age):
print("안녕하세요", name, "님! 나이는 ", age, "세입니다.")
# 위치 전달인자 사용
greet("철수", 30) # 출력: 안녕하세요, 철수님! 나이는 30세입니다.
4. 키워드 인수
키워드 인수 (Keyword Arguments)
- 인수를 순서대로 전달하는 대신에 특정 매개변수에 값을 할당하여 전달
- 그래서 순서 바꿔도 영향 없음
- 딥러닝하면서 넣어야 할 인수가 많을 때 등의 상황에 사용함
def greet(name, age):
print("이름:", name)
print("나이:", age)
# 키워드 인수를 사용하여 함수 호출
greet(name="Alice", age=30)
5. 기본값 설정하기
기본값 (Default Values)
- 해당 매개변수에 인수가 전달되지 않았을 때 기본값으로 사용할 값을 설정할 수 있음
def greet(name="Guest", age=25):
print("이름:", name)
print("나이:", age)
# 기본값이 설정된 함수 호출
greet()
# 함수를 호출할 때 인수를 전달하지 않으면 기본값이 사용됨
# greet 함수의 매개변수인 name과 age는 각각 "Guest"와 25의 기본값을 가짐
6. 키워드 인수와 기본값 함께 사용하기
- 키워드 인수와 기본값을 함께 사용하여 함수를 호출 가능
def greet(name="Guest", age=25):
print("이름:", name)
print("나이:", age)
# 키워드 인수를 사용하여 함수 호출
greet(name="Alice", age=30)
# 일부 매개변수에만 키워드 인수 사용하여 호출
greet(name="Bob")
'''
이름: Alice
나이: 30
이름: Bob
나이: 25
'''
7. 가변 인수 활용하기
가변 인수 (Variable-length Arguments)
- 여러 개의 인수들을 받을 수 있는 함수를 만들기 위해서 가변인수 활용 가능
- 파이썬에서는 *args와 **kwargs 사용
- `*args` : 함수를 호출할 때 임의의 개수의 위치 인수를 전달
- `**kwargs` : 함수를 호출할 때 임의의 개수의 키워드 인수를 전달
# *args 활용 예시
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`라는 튜플로 위치 인수들을 받아 처리
# *kwargs 활용 예시
def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_info(name="Alice", age=30, country="USA")
# 위의 코드에서 `print_info` 함수는 임의의 개수의 키워드 인수를 받아서 그 정보를 출력
# 함수 내에서는 `kwargs`라는 딕셔너리로 키워드 인수들을 받아 처리
8. 함수가 데이터 분석에 활용되는 예시
데이터 전처리 함수
def stadardization(data):
# 데이터 표준화 함수
scaled_data = (data - data.mean()) / data.std()
return scaled_data
def impute_missing_values(data):
# 결측치 처리 함수
filled_data = data.fillna(data.mean())
return filled_data
def nomalization(data):
# 데이터 정규화 함수
scaled_data = (data - data.min()) / (data.max() - data.min())
return scaled_data
데이터 시각화 함수
import matplotlib.pyplot as plt
def plot_histogram(data):
# 히스토그램을 그리는 함수
plt.hist(data, bins=20)
plt.xlabel('Value')
plt.ylabel('Frequency')
plt.title('Histogram of Data')
plt.show()
def plot_scatter(x, y):
# 산점도를 그리는 함수
plt.scatter(x, y)
plt.xlabel('X')
plt.ylabel('Y')
plt.title('Scatter Plot')
plt.show()
통계 계산 함수
import numpy as np
def calculate_mean(data):
# 평균을 계산하는 함수
return np.mean(data)
def calculate_std(data):
# 표준편차를 계산하는 함수
return np.std(data)
def calculate_correlation(x, y):
# 상관 관계를 계산하는 함수
return np.corrcoef(x, y)
퀴즈
1. 평균과 분산 계산기
주어진 데이터셋의 평균을 계산하는 함수를 작성하고 함수의 결과를 출력해 보세요!
# 데이터는 이것을 사용하세요
data = [2, 4, 6, 8, 10]
` 내 풀이`
data = [2, 4, 6, 8, 10]
def avg_values(data_list):
total = 0
for num in data:
total += num
return(total/len(data))
avg_values(data)
`모범답안`
def calculate_average(data):
total = sum(data)
length = len(data)
average = total / length
return average
data = [2, 4, 6, 8, 10]
result = calculate_average(data)
print("평균:", result)
`오답노트`
파이썬 `return`과 `print` 차이
- print는 단순히 출력값을 보여줌
- return은 함수 def 에 대한 호출이 있을 때 값을 반환함. 그 자체로는 출력이 불가하고 print 써야 출력함
[10-5 파이썬] print와 return 차이, print vs return, 출력 vs 반환, 출력 vs 리턴
함수에서 print()를 사용할 때와 return을 사용할 때 함수를 실행해보면 콘솔창 화면이 똑같은 경우가 있다. 하지만 print()와 return의 쓰임새는 차이가 있다. print()와 return의 다른 점과 용도에 대해 알
olivia-blackcherry.tistory.com