Python to AI

Python - 함수의 기본적 개념과 사용법

최 수빈 2024. 12. 12. 23:26
더보기
  1. 함수 정의와 호출
    함수를 정의하고 호출하는 기본 구조
    함수 호출 시 매개변수 전달 방식
  2. 매개변수의 사용
    매개변수가 없는 함수
    매개변수가 있는 함수
    기본값이 있는 매개변수
    기본값이 없는 매개변수
  3. 가변 인자
    *args
    **kwargs
  4. 특수 매개변수와 타입 힌트
    매개변수와 반환값에 타입 힌트를 추가하는 방법
    슬래시(/)와 별표(*)로 매개변수의 동작을 제한하는 방법
  5. 반환값의 유무 (예시코드 따로 없음)
    결괏값을 반환하는 함수와 반환하지 않는 함수의 차이 

 

함수 정의와 호출

def hi(): #함수 정의는 def 키워드로 시작
    print('hi')
    print('안녕')
    print('나 혼자 있고싶으니까 가세여')
    
hi() #함수명으로 함수를 호출하여, 함수 내부의 코드를 실행

 
 

함수의 기본 구조

정의 def 함수명(매개변수):

호출 함수명(인자)

 
 
매개변수가 있는 함수
def hello(name): #함수에 매개변수를 전달하여 동적으로 동작을 변경
    print(f'hi {name}')

#호출 시 각기 다른 값을 전달 가능
hello('won')
hello('im')

 
 

기본값이 있는 매개변수

def hello(name, age=None): #매개변수에 기본값을 설정하면, 인자를 생략 가능(None은 기본값으로 자주 사용되며, 값이 없는 상태를 나타냄)
   print(f'hi {name} age is {age}')
   
hello('won')

 

결과값을 반환하는 함수

def plus_x_y(x, y):
    if x == 10:
        return True #return을 사용해 함수 실행 결과를 호출자에게 반환
    else:
        return False

#반환값을 변수에 저장하거나 바로 사용할 수 있음
a = plus_x_y(4, 44)
print(a)

 

가변 인자(가변 매개변수)

 *args

def get_number(*args): # *args: 임의 개수의 인자를 튜플로 전달받음
    for i, v in enumerate(args): 
        print(f'result {i} {v}') 
        
get_number('im', 'kim', 'lee')

 **kwargs

def get_info(**kwargs): # **kwargs: 임의 개수의 키워드 인자를 딕셔너리로 전달받음
    for k, v in kwargs.items(): 
        print(k, v) 
        
get_info(name='im', age=30)

 

가변 매개변수의 응용

def mixed_function(a, b, *args, c=10, **kwargs):
    print(f"a: {a}, b: {b}, args: {args}, c: {c}, kwargs: {kwargs}")

mixed_function(1, 2, 3, 4, 5, c=20, d=30, e=40)

#a: 1, b: 2, args: (3, 4, 5), c: 20, kwargs: {'d': 30, 'e': 40}

*args와 **kwargs를 조합해 함수 설계

타입 힌트

매개변수와 반환값의 타입 힌트 작성법

#정적 분석 도구나 IDE에서 코드 작성 시 도움을 받을 수 있음

def hint(word: str, num: int) -> int: #매개변수와 반환값의 타입을 힌트로 제공하여 코드 가독성 높임
    return len(word) + num

 
 

특수 매개변수 제한

함수 매개변수의 사용 방법을 명확히 제어하기 위해 도입된 문법

 
매개변수 규칙

슬래시(/)
슬래시 앞의 매개변수(a, b)는 **위치 인자(positional-only)**로만 사용할 수 있음
키워드 인자로 전달하려고 하면 오류 발생
별표(*)
별표 뒤의 매개변수(d)는 **키워드 인자(keyword-only)**로만 사용할 수 있음
위치 인자로 전달하려고 하면 오류 발생

#슬래시(/)와 별표(*)를 사용한 매개변수 제한
def func(a, b, /, c, *, d): 
    print(a, b, c, d) 
    
func(1, 2, c=3, d=4)

a, b : 위치 인자로 전달
c : 키워드 또는 위치 인자로 전달
d : 키워드 인자로 전달

def create_user(name, age, /, *, is_admin=False):
    print(f"Name: {name}, Age: {age}, Admin: {is_admin}")

# 호출
create_user("수빈이", 499, is_admin=True)  # 정상
create_user(name="모르겠고", age=25, is_admin=False)  # 오류 발생

 

  • 슬래시(/)와 별표(*)는 매개변수 사용 방식을 제한하여 함수 호출을 더 명확하고 의도적으로 만듦
  • 슬래시(/) 앞: 위치 인자만 가능
  • 별표(*) 뒤: 키워드 인자만 가능
  • 이를 활용하면 API 설계나 함수 호출 방식을 통제할 수 있어, 코드 가독성과 유지보수성이 향상

 
 
 

함수는 코드를 구조화하고 재사용성을 높이는 핵심 도구