Python 공부 | 함수

2024. 12. 18. 09:07·Python

 

함수

  • 입력을 받아 원하는 처리를 한 후 출력을 내보내는 일련의 작업을 수행하는 코드

함수의 정의

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

 

'Python' 카테고리의 다른 글
  • Python 실습 | 두 수의 차, 곱, 몫,합 구하기, 나이 출력, 숫자 비교, 짝수의 합, 배열의 평균값
  • Python 공부 | 알면 유용한 파이썬 문법
  • Python 실습 | 이메일 유효성 검사
  • Python 실습 | 짝수 판별, 제품 재고 관리
초담
초담
4년차 마케터입니다
  • 초담
    그로스마케터의 기록
    초담
  • 전체
    오늘
    어제
  • 글쓰기 관리
    • 분류 전체보기 (117)
      • Data Analytics Project (3)
      • SQL (55)
      • Python (43)
      • GA4 (0)
      • Tableau (8)
      • 아티클 스터디 (7)
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
초담
Python 공부 | 함수
상단으로

티스토리툴바