Python 함수

배추·2025년 11월 13일

🐍 Python

목록 보기
9/19

Python의 함수에 대해 알아봅니다.


▶︎함수란?

  • 입력값을 가지고 어떤 일을 수행한 후 그 결과물을 내어 놓는 것.
  • 반복되는 부분이 있을 경우, ‘반복적으로 사용되는 가치 있는 부분’을 한 뭉치로 묶어 ‘어떤 입력값을 주었을 때 어떤 결괏값을 반환해 준다’라는 식의 함수로 작성.
  • 작성한 프로그램을 기능 단위의 함수로 분리해 놓으면 프로그램 흐름을 일목요연하게 볼 수 있다.

▶︎파이썬 함수의 구조

def 함수_이름(매개변수):
    수행할_문장1
    수행할_문장2
    ...
  • def: 함수를 만들 때 사용하는 예약어.

매개변수와 인수

  • 매개변수: 함수에 입력으로 전달된 값을 받는 변수.
  • 인수: 함수를 호출할 때 전달하는 입력값.
def add(a, b):  # a, b는 매개변수
    return a+b

print(add(3, 4))  # 3, 4는 인수

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

  • 함수를 호출할 때 매개변수를 지정할 수도 있다.
  • 매개변수를 지정하면 순서에 상관없이 사용할 수 있다는 장점이 있다.
def add(a, b):  
    return a+b

result = sub(b=5, a=3)  # b에 5, a에 3을 전달
print(result) # -2

입력값이 몇 개일지 모를 때

가변 매개변수

def 함수_이름(*매개변수):
    수행할_문장
    ...
  • *매개변수 사용.
  • 변수 이름 앞에 *을 붙이면 입력값을 전부 모아 튜플로 만들어준다.
  • 사용 예)
    def add_many(*args): 
        result = 0 
        for i in args: 
            result = result + i   # *args에 입력받은 모든 값을 더한다.
        return result 
    • args는 인수를 뜻하는 영어 단어 arguments의 약자이며 관례적으로 자주 사용한다.

📍키워드 매개변수, kwargs

def print_kwargs(**kwargs):
    수행할_문장
    ...
  • 키워드 매개변수는 함수 호출 시 키워드=값 형태로 전달하는 매개변수를 받을 때 사용한다.

  • 키워드 매개변수를 사용할 때는 매개변수 앞에 별 2개(**)를 붙인다.

  • 사용 예)

    def print_kwargs(**kwargs):
        print(kwargs)
    
    print_kwargs(a=1) # {'a': print_kwargs(name='foo', age=3) # {'age': 3, 'name': 'foo'}

순서

  • 일반 매개변수, 가변 매개변수(*args), 키워드 매개변수(**kwargs)를 모두 함께 사용할 수도 있다.
  • 이때 순서는 반드시 다음과 일반 매개변수, 가변 매개변수(*args), 키워드 매개변수(**kwargs)야 한다.
def mixed_function(name, *args, **kwargs):
    print(f"이름: {name}")
    print(f"추가 인수들: {args}")
    print(f"키워드 인수들: {kwargs}")

mixed_function('홍길동', 1, 2, 3, age=25, city='서울')

▶︎함수의 반환값은 언제나 하나

def add_and_mul(a,b): 
    return a+b, a*b
    
result = add_and_mul(3,4) # (7, 12) 
  • 함수의 반환값은 언제나 1개.
  • 따라서 add_and_mul 함수의 반환값 a+b와 ab는 튜플값 하나인 (a+b, ab)로 리턴된다.

def add_and_mul(a,b): 
    return a+b, a*b
    
result1, result2 = add_and_mul(3, 4)
result1 # 7
result2 # 12
  • 만약 이 하나의 튜플 값을 2개의 값으로 분리하여 받고 싶다면 함수를 위와 같이 호출.

def add_and_mul(a,b): 
    return a+b 
    return a*b 
    
result = add_and_mul(2, 3) # 5
  • 함수는 return 문을 만나는 순간, 반환값을 반환한 다음 함수를 빠져나가게 된다.
  • 특별한 상황일 때 함수를 빠져나가고 싶다면 return을 단독으로 써서 함수를 즉시 빠져나갈 수 있다.

▶︎매개변수에 초깃값 미리 설정하기

  • 매개변수에 초깃값을 미리 설정하기.
  • 초깃값이 없는 매개변수는 초깃값이 있는 매개변수 뒤에 사용할 수 없다.
def say_myself(name, age, man=True): 
    print("나의 이름은 %s 입니다." % name) 
    print("나이는 %d살입니다." % age) 
    if man: 
        print("남자입니다.")
    else: 
        print("여자입니다.")

# say_myself 함수는 2가지 방법으로 사용할 수 있다.
say_myself("박응용", 27)
say_myself("박응용", 27, True)

▶︎함수 안에서 선언한 변수의 효력 범위

  • 함수 안에서 사용하는 매개변수는 함수 안에서만 사용하는 ‘함수만의 변수’이다. 함수 밖에서는 사용되지 않는다.
a = 1
def vartest(a):
    a = a + 1

vartest(a) # 2
print(a) # 1

함수 안에서 함수 밖의 변수를 변경하는 방법

return 사용하기

a = 1 
def vartest(a): 
    a = a +1 
    return a

a = vartest(a) 
print(a)

global 명령어 사용하기

a = 1 
def vartest(): 
    global a 
    a = a+1

vartest() 
print(a)
  • vartest 함수 안의 global a 문장은 함수 안에서 함수 밖의 a 변수를 직접 사용하겠다는 뜻이다. (바깥쪽에 있는 a를 가져온다)
  • 하지만 global 명령어는 사용하지 않는 것이 좋다. 함수는 독립적으로 존재하는 것이 좋기 때문. 외부 변수에 종속적인 함수는 그다지 좋은 함수가 아니다.

리스트나 딕셔너리를 함수에 전달할 때는 원본이 변경될 수 있다

def change_list(my_list):
    my_list.append(4)  # 리스트에 값을 추가

a = [1, 2, 3]
change_list(a)
print(a) # [1, 2, 3, 4]
  • 함수에서 리스트에 값을 추가했을 때 원래 리스트 a도 함께 변경되었다. 이는 리스트가 '변경 가능한(mutable)' 자료형이기 때문이다.
  • 딕셔너리도 마찬가지로 함수 안에서 값을 변경하면 원래 딕셔너리도 함께 변경된다.

▶︎lambda 예약어

  • lambda: 함수를 생성할 때 사용하는 예약어로 def와 동일한 역할을 한다
  • 보통 함수를 한 줄로 간결하게 만들 때 사용.
  • def를 사용해야 할 정도로 복잡하지 않거나 def를 사용할 수 없는 곳에 주로 쓰인다.
  • 사용법: 함수_이름 = lambda 매개변수1, 매개변수2, ... : 매개변수를_이용한_표현식
  • lambda로 만든 함수는 return 명령어가 없어도 표현식의 결괏값을 반환한다.
add = lambda a, b: a+b
result = add(3, 4)
print(result) # 7

▶︎함수의 Docstring

  • 독스트링: 함수에 대한 설명을 문서화하는 방법.
  • 함수의 첫 번째 줄에 삼중 따옴표로 둘러싼 문자열을 작성.
def add(a, b):
    """
    두 숫자를 더하는 함수

    Parameters:
    a (int, float): 첫 번째 숫자
    b (int, float): 두 번째 숫자

    Returns:
    int, float: 두 숫자의 합
    """
    return a + b

# 독스트링 확인하기
print(add.__doc__)
profile
난 🥬

0개의 댓글