class="layout-aside-right paging-number">
본문 바로가기
데이터 분석/Python

Python(4) : 함수

by heestory323 2025. 3. 11.

1. 함수의 정의

2. 예

 

 

-함수 : 입력(input)을 받아 원하는 처리를 한 후 출력(output)을 내보내는 작업을 수행하는 코드 블록

-코드 재사용, 모듈화, 유지 보수에 용이, 가독성 향상

 

  • 함수 정의
def 함수이름(매개변수):
    함수 내부에서 수행할 문장1
    함수 내부에서 수행할 문장2
    ... 
    return 결과값  # (선택적) 함수의 결과를 반환

 

 

  • 매개변수(parameter) : 함수 내에서 정의되어 사용되어지는 변수
  • 인수(arguments) : 함수를 호출할 때 건네주는 변수

 

기본 함수 - 예제

def add(a,b):    --a,b는 매개변수
	result=a+b
    return result
    
print(add(3,4)) # 7 -- 3,4는 인수

이 함수의 이름은 add이고 입력으로 2개의 값을 받으며
리턴값(출력값)은 2개의 입력값을 더한 값이다.

 

 

입력값이 없는 함수

def say():
	return 'Hi'  -- 매개변수(입력값)가 없어도 Hi라는 값이 return 가능
                         but 다른 값이 say(a) 처럼 들어가면 -> error
a = say() 
print(a)  #Hi  -- a가 출력

 

출력값이 없는 함수

[return값이 없는 경우]
def add(a,b):
	print("%d,%d의 합은 %d입니다" % (a,b,a+b)) 
              --  return X
a = add(1,2)  -- add 함수로 처리 후 출력return이 없으므로
                  a에 None이 담김 

print(a) # 1,2의 합은 3입니다 -- print로 그냥 찍은 것(O), return값 (X)
        # None

 

만약 있다면?

[return값이 있는 경우]
def add(a,b):
	print("%d,%d의 합은 %d입니다" % (a,b,a+b)) 
    return a+b
    
a = add(1,2)  
print(a)    # 1,2의 합은 3입니다
            # 3

 

입력값, 출력값 모두 없는 함수

def say():
	print('Hi')  -- 어떠한 입력을 받아서 수행하는 것(X)
                    그냥 실행하면 입력값이 없어도 함수가 실행됬을 때 실행되는 print 
    
a = say() -- say에서 a에 return 되는 값 X = a에 아무것도 안담김 
print(a)  # Hi
          # None -- a에 아무것도 담기지 않았기때문

 

매개변수를 지정하여 호출하기

def sub(a,b) :
	return a-b
    
a = sub(b=1,a=3)  -- a에 함수 결과가 return 되어 담겨짐
                     a에 3, b에 1 굳이 지정하여 전달 가능(위치 순서 상관x)

print(a)  # 2 -- print하면 2가 출력

 

입력값이 여러 개인 함수 : 여러 개의 매개변수를 *args 로 지정 ->  매개변수(입력값)을 한번에 받아주기 

def add_many(*args):
	result = 0
    for i in args:
    	result = result + i  -- args에 입력받은 모든 값을 더한다.
    return result
    
print(add_many(1,2,3,4,5)) -- 1,2,3,4,5 를 다 쓰지 않고도 함수 적용 가능
  # 15

 

여러개 + 하나 지정하는 것도 가능 ! 

 

def add_mul(choice,args*):
	if choice == "add" : -- 매개변수 choice에 "add"를 입력받았을 때 
    	result = 0
        for i in args:   -- args에 있는 값을 하나씩 가져와서
        	result = result + i -- result에 더함
    elif choice == "mul" : -- 매개변수 choice에 "mul"을 입력받았을 때 
   	result = 1
        for i in args : -- args에 있는 값을 하나씩 가져와서
        	result = result * i -- result에 곱함
   return result
   
   result = add_mul("add",1,2,3,4) -- 첫번째 매개변수에 add라는 aurguments를 주고, 
   print(result)          나머지 뒤의 arguments들은 몇개든 상관없이 다 받아서 *args로 들어가게 됨
   # 10

 

📌 result = result + i   의 의미
기존의 result 값에 i 를 더한 후, 다시 result 에 저장함.

i = 1 일 때 -> result = 시작값 0 + 1  -> result = 1
i = 2 일 때 -> result = 1 + 2  -> result = 3
i = 3 일 때 -> result = 3 + 3  -> result = 6
i = 4 일 때 -> result = 6 + 4  -> result = 10


📌 result = result * i
i = 1 일 때 -> result = 시작값 1 * 1  -> result = 1
i = 2 일 때 -> result = 1 * 2  -> result = 2
i = 3 일 때 -> result = 2 * 3  -> result = 6
i = 4 일 때 -> result = 6 * 4  -> result = 24 

 

키워드 매개변수 : **kwargs - 딕셔너리 형태, key와 value로 받는 것

def print_kwargs(**kwargs) : --입력값의 갯수에 상관없이 **kwargs로 받아서
	print(kwargs)              딕셔너리 { : , : } 형태로 출력
    
print_kwargs(a=1,b=2)   # {'a':1 , 'b':2}

 

함수에서 return 값은  only 하나이다 : return 이 나오면 함수 종료

함수는 return문을 만나는 순간 결과값을 돌려준 다음 함수를 빠져나가게 된다.(종료)

 

 

매개변수에 기본값 미리 지정하기 : 초기값이 잇는 매개변수는 항상 맨 뒤에 위치

매개변수에 미리 man = True 라고 초깃값을 미리 설정해 놓으면 

이후 say_myself("이빠진퍄노", 20) 다음에 man = True 라는 게 기본값이므로 써줘도,  안 써줘도 결과가 같음

name과 old는 함수로 들어가서 사용되나 man은 기본값이 True이므로 if문이 true라서 "남자입니다"가 출력됨.

 

#

나의 이름은 이빠진퍄노 입니다.

나이는 20살입니다.

남자입니다.

 

↔ 새로운 값("여자입니다") 가 필요하면 

      say_myself("이빠진퍄노", 20, False) <- False를 써 줌으로써 기본값을 없애고 "여자입니다"가 출력됨  

 

#나의 이름은 이빠진퍄노 입니다.

나이는 20살입니다.

여자입니다.

 

Lambda

함수를 한줄로 간결하게 만들때 사용

lambda 매개변수 : 실행할 코드
def add(a,b):
	return a+b
    
 add = lambda a, b : a+b
 result = add(3,4)
 print(result)

 

 

-함수의 평균 계산

def calculate_mean(numbers):  -- calculate_mean 이라는 함수의 매개변수는 numbers
    total = sum(numbers)    -- numbers의 값을 더해서 total 이라는 변수에 담고
    mean = total / len(numbers)  --그 값의 len() (갯수)를 센뒤 토탈에서 나눠주면
    return mean    -- mean(평균)을 구함. 그 뒤 return으로 함수 밖으로 내보냄

# 함수 호출 및 예시
data = [10, 20, 30, 40, 50]  -- 숫자 리스트를 인수로 전달
average = calculate_mean(data)  -- 함수를 통해 평균값 계산
print("평균:", average)  # 출력 - 평균 : 30

 

-숫자 리스트에서 최대값 찾는 함수

def find_max(numbers): -- find_max라는 함수의 매개변수는 numbers
    max_num = numbers[0] -- 인덱싱하여 numbers의 첫번째 값을 가져옴
    for num in numbers:  -- numbers에 있는 값을 가져오는데
        if num > max_num:     첫번째 값(max_num) 보다 큰 경우에만
            max_num = num          max_num에 값이 들어감  [반복]
    return max_num       -- 이런 반복을 계속한 뒤 결과를 출력
 
# 함수 호출
print(find_max([3, 7, 2, 9, 5]))  # 출력: 9

 

-튜플의 모든 요소를 곱하는 함수

def multiply_tuple(tup):  -- 함수의 매개변수 tup 
    result = 1 -- 초기값을 임의로 1로 지정 
    for num in tup:  -- 튜플에서 값(num)을 하나씩 빼오고
        result *= num    result에 계속해서 임의로 빼온 그 값(num)을 누적해서 곱함
    return result

# 함수 호출
print(multiply_tuple((2, 3, 4)))  # 출력: 24

 

-주어진 문자열에서 각 문자의 출현 빈도를 딕셔너리로 반환하는 함수

def char_frequency(string): -- string이라는 매개 변수
    freq_dict = {}  -- 임의의 딕셔너리 생성
    for char in string: -- string에서 글자를 하나씩 빼옴
        if char in freq_dict: -- 조건문에서의 in 은 char이라는 단어가 freq_dict에서 존재유무 확인
            freq_dict[char] += 1 -- true이면 발동
        else:                   
            freq_dict[char] = 1  -- false면 발동
    return freq_dict

# 함수 호출
print(char_frequency("hello"))  # 출력: {'h': 1, 'e': 1, 'l': 2, 'o': 1}

 

 

2. 심화

  • 전역변수 vs 지역변수
    • 전역변수 : 프로그램 전체에서 접근 가능한 변수, 함수 내에도 접근 가능
    • 지역변수 : 특정한 범위(함수 내부)에서만 접근 가능한 변수.
                       범위를 벗어나면 메모리에서 사라짐(해당 함수에서만 유효)
# 전역변수 예시 -- 함수 외부,내부에서 가능
global_var = 10

def global_example():
    print("전역변수 접근:", global_var)

global_example()  # 출력: 전역변수 접근: 10
# 함수 내에서 전역변수를 수정하는 예시
def modify_global():
    global global_var
    global_var = 30 -- 값을 새로 담았음
    print("함수 내에서 수정된 전역변수:", global_var)

modify_global()  # 출력: 함수 내에서 수정된 전역변수: 30
print("수정된 전역변수 확인:", global_var)  # 출력: 수정된 전역변수 확인: 30
# 지역변수 예시
def local_example():
    local_var = 20
    print("지역변수 접근:", local_var)

local_example()  # 출력: 지역변수 접근: 20

 

  • 인수 vs 매개변수
    • 인수(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

 

  • 위치 인수 : 순서대로 인수값이 매개변수에 매핑됨
def greet(name, age):
    print("안녕하세요", name, "님! 나이는 ", age, "세입니다.")

# 위치 전달인자 사용
greet("철수", 30)  -- 위치에 따라 철수 다음 30 이 매핑
# 출력: 안녕하세요, 철수님! 나이는 30세입니다.

 

 

  • 키워드인수 : 어떤 매개변수에 - 어떤 인수값을 쓸건지 명확하게 지정
                        순서에 상관없이 매핑됨
def greet(name, age):
    print("이름:", name)
    print("나이:", age)

# 키워드 인수를 사용하여 함수 호출
greet(name="Alice", age=30) -- 매개변수 name에 alice라는 값을 할당
                               매개변수 age에  30 이라는 값을 할당

 

 

  • 매개변수에 기본값(Default Values) 설정하기
def greet(name="Guest", age=25): -- 매개변수의 기본값 설정
    print("이름:", name)
    print("나이:", age)

# 기본값이 설정된 함수 호출
greet()  -- 함수 호출시 인수가 전달되지 않으면 기본값 사용

 

  • 기본값 + 키워드 함수
def greet(name="Guest", age=25):
    print("이름:", name)
    print("나이:", age)

# 키워드 인수를 사용하여 함수 호출
greet(name="Alice", age=30)  -- 인수에 키워드 지정하여 함수 호출   
                           # 이름 : Alice 
                             나이 : 30

# 일부 매개변수에만 키워드 인수 사용하여 호출
greet(name="Bob") -- 키워드를 하나만 지정할경우, 나머지에는 기본값이 들어감 
                 # 이름 : bob 
                   나이 : 25

 

  • 가변인수 : 여러개의 인수들을 받을 수 있는 함수를 만들기위해 가변인수 사용
    • *args : 함수를 호출할 때, 임의의 위치 인수 전달
def sum_values(*args): -- 매개변수에 *args : 인수가 몇개든 상관없이 실행가능
    total = 0
    for num in args:
        total += num
    return total

result = sum_values(1, 2, 3, 4, 5) -- 인수
print("합계:", result)  # 출력: 합계: 15

 

    • **kwargs : 함수를 호출할 때, 임의의 개수의 키워드인수 전달 
    •  
def print_info(**kwargs): -- 매개변수에 **kwargs 사용 : 인수가 몇개든 상관없음,
    for key, value in kwargs.items():                  키워드에 맞게끔 정리해서 넣어줌
        print(key, value)

print_info(name="Alice", age=30, country="USA")

 

 

 

  • 함수가 데이터 분석에서 사용되는 경우
    • 데이터 전처리 함수 : 데이터 정규화, 결측치 처리 등의 함수를 사용하여 데이터 전처리 
    • 데이터 시각화 함수 : 데이터의 분포, 상관관계 등을 함수를 사용하여 히스토그램, 산점도로 시각화
    • 통계 계산 함수 : 다양한 통계량 계산
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)