Python

Chapter 5 -2 : Python_Functions_2 (기본값, 키워드값, 가변인자, 지역변수와 전역변수)

Dev.sleep_soo 2024. 1. 14. 17:48


안녕하세요, 오늘은 파이썬 함수에 대해 저번에 다 기록하지 못한 내용을
2탄으로 마저 작성할까 합니다.
오늘은 파이썬 함수에서 기본값, 키워드값, 가변인자,
그리고 지역변수와 전역변수에 대해 다루어 보겠습니다.


파이썬 함수의 기본값


파이썬 함수에서 기본값이란?
-함수를 호출할 때 인자를 전달하지 않았을 경우 사용되는 값을 말합니다.
예를들어 그전에 공부한 함수의 기본 형태는
def soo(height, weight): 본문
이렇게 매개변수가 두개인 형태에서 함수를 호출할때
꼭 매개변수 둘다 적어줘야 호출이 가능했습니다.
soo(181, 70) 이런식으로 말이죠
그런데 기본값을 설정해 놓으면 꼭 인자값을 전달해 주지 않다도 된다는 것입니다.  
예제코드를 보면서 공부해보겠습니다.

def greet(name, message="안녕하세요!"):
    print("{0}, {1}".format(name, message))


# 기본값이 있는 매개변수를 사용하는 경우
greet("soo")  # "soo, 안녕하세요!" 출력
greet("siu", "반갑습니다!")  # "siu, 반갑습니다!" 출력


# 기본값이 없는 매개변수와 기본값이 있는 매개변수를 함께 사용하는 경우
def calculate_total_price(price, quantity=1, tax_rate=0.1):
    total = price * quantity * (1 + tax_rate)
    return total


# 기본값이 없는 매개변수에 인자를 전달하는 경우
result1 = calculate_total_price(1000, 2)  # price=1000, quantity=2, tax_rate=0.1 (기본값)
print(result1)  # 2200 출력

# 기본값이 있는 매개변수를 생략하는 경우
result2 = calculate_total_price(500)  # price=500 (인자 전달), quantity=1 (기본값), tax_rate=0.1 (기본값)
print(result2)  # 550 출력


위의 예제 코드에서 greet() 함수
namemessage라는 두 개의 매개변수를 가지며,
message 매개변수에는 기본값이 설정되어 있습니다.
이렇게 기본값이 있는 매개변수는
함수를 호출할 때 인자를 전달하지 않아도 됩니다.

또 다른 예제로는 calculate_total_price() 함수가 있는데,
이 함수는 price, quantity, tax_rate라는 매개변수를 가지며,
quantitytax_rate 매개변수에는 각각 기본값이 설정되어 있습니다.
이렇게 기본값이 있는 매개변수를 사용하면
함수를 호출할 때 일부 매개변수를 생략할 수 있습니다.

이렇게 파이썬 함수의 기본값을 활용하면
함수 호출 시 매개변수를 유연하게 다룰 수 있습니다.
기본값이 있는 매개변수는 필요한 경우에만 인자를 전달하고,
그렇지 않은 경우에는 기본값을 사용할 수 있습니다.

예제코드 출력결과

키워드 값


파이썬 함수에서 키워드값을 사용하면 함수를 호출할 때
매개변수의 이름과 값을 직접 지정할 수 있습니다.
이를 통해 매개변수의 순서에 구애받지 않고 인자를 전달할 수 있습니다.
예제 코드를 통해 이를 확인해보겠습니다

# 함수 정의
def calculate_total_price(price, quantity, discount):
    total = price * quantity * (1 - discount)
    return total


# 키워드값을 사용하여 함수 호출
total_price1 = calculate_total_price(price=1000, quantity=5, discount=0.1)
print("총 가격 : {}원".format(total_price1))

total_price2 = calculate_total_price(discount=0.2, quantity=3, price=1500)
print("총 가격 : {}원".format(total_price2))


위의 예제 코드에서는 calculate_total_price() 함수를 정의하고
키워드값을 사용하여 함수를 호출하는 방법을 보여줍니다.
함수는 가격(price), 수량(quantity), 할인율(discount)
매개변수로 받아 총 가격을 계산하여 반환합니다.

첫 번째 예제에서는 calculate_total_price() 함수를 호출할 때
price=1000, quantity=5, discount=0.1과 같이
키워드값을 사용하여 매개변수에 값을 전달합니다.
이렇게 키워드값을 사용하면
매개변수의 순서와는 상관없이 값을 전달할 수 있습니다.

두 번째 예제에서는 매개변수의 순서를 바꾼 상태로 함수를 호출했습니다.
하지만 discount=0.2, quantity=3, price=1500와 같이
키워드값을 사용하여 각각의 매개변수에 값을 전달했습니다.
이렇게 키워드값을 사용하면 매개변수의 순서와는 상관없이
정확히 어떤 값을 어떤 매개변수에 전달할지 지정할 수 있습니다.

예제코드 출력결과


가변인자


가변인자함수에 임의의 개수의 인자를 전달할 수 있게 해주는 기능입니다.
# 가변인자를 사용하려면 함수 정의 시
매개변수 이름 앞에 `*`을 붙여야 합니다.
이렇게 정의된 가변인자는 함수 내부에서 튜플 형태로 전달됩니다.
이렇게 전달된 튜플은 반복문을 통해 각 원소에 접근할 수 있습니다.

가변인자를 사용하면 함수를 호출할 때
전달하는 인자의 개수가 다를 수 있습니다.
이를 통해 유연하게 함수를 사용할 수 있는 것입니다.
예를 들어, 동일한 함수를 다양한 인자 개수에 대해 호출할 수 있습니다.

def calculate_average(*numbers):
    total = sum(numbers)
    average = total / len(numbers)
    return average

def print_result(name, *scores):
    average_score = calculate_average(*scores)
    print("이름: {}".format(name))
    print("성적:", end=" ")
    for score in scores:
        print(score, end=" ")
    print("\n평균 성적: {:.2f}".format(average_score))

print_result("김철수", 80, 75, 90, 85)
print_result("이영희", 95, 88, 92, 78, 85, 90)


위의 예제 코드에서 *numbers*scores가변인자로 정의되어 있습니다.
이를 통해 임의의 개수의 인자를 전달할 수 있습니다.
함수 내부에서는 가변인자를 튜플로 처리하고,
반복문을 통해 각 원소에 접근하여 처리할 수 있습니다.
가변인자를 사용하면 함수의 활용성과 유연성을 높일 수 있습니다.
예제코드 풀이는 아래 내용을 참고해 주세요.

  • calculate_average(*numbers) 함수:
       - *numbers는 임의의 개수의 인자를 받을 수 있는 가변인자입니다.
       - 전달된 인자들의 합을 구하고 인자들의 개수로 나눠서 평균값을 계산합니다.   - 평균값을 반환합니다.
  • print_result(name, *scores) 함수:
       - name은 이름을 나타내는 인자입니다.
       - *scores는 임의의 개수의 성적을 받을 수 있는 가변인자입니다.
       - calculate_average(*scores)를 호출하여 성적의 평균값을 계산합니다
       - 이름과 성적을 출력하고, 평균 성적을 출력합니다.
  • print_result("김철수", 80, 75, 90, 85) 호출:
       - "김철수"라는 이름과 성적을 전달하여 print_result 함수를 호출합니다.
       - 성적의 평균값을 계산하여 출력합니다.
  • print_result("이영희", 95, 88, 92, 78, 85, 90) 호출:
       - "이영희"라는 이름과 성적을 전달하여 print_result 함수를 호출합니다.
       - 성적의 평균값을 계산하여 출력합니다.


예제코드 출력결과

지역변수와 전역변수

내용이 좀 길어지긴 하는데 여기서 또 끊자니 애매해서
그냥 지역변수전역변수까지 다루고 마치도록 하겠습니다.
지역 변수전역 변수는 파이썬에서 변수의 유효 범위를 나타내는 개념입니다.

  • 지역 변수: 함수 내에서 정의된 변수로 해당 함수 내에서만 접근할 수 있습니다. 다른 함수나 전역 영역에서는 해당 변수에 접근할 수 없습니다.
  • 전역 변수: 함수 외부에서 정의된 변수로 프로그램 전체에서 접근할 수 있습니다. 함수 내에서도 global 키워드를 사용하여 전역 변수에 접근할 수 있습니다.
# 전역 변수
total_money = 5000

def add_money(amount):
    # 지역 변수
    global total_money
    total_money += amount

def spend_money(amount):
    # 지역 변수
    global total_money
    if total_money >= amount:
        total_money -= amount
    else:
        print("잔액이 부족합니다.")

print("현재 잔액: ${}".format(total_money))
add_money(1000)
print("추가된 후 잔액: ${}".format(total_money))
spend_money(2000)
print("사용 후 잔액: ${}".format(total_money))


add_money 함수amount라는 값을 매개변수로 받아와서
전역 변수 total_money에 더합니다.
변수 total_moneyglobal 키워드를 사용하여
전역 변수로 선언되었습니다.

spend_money 함수amount라는 값을 매개변수로 받아와서
전역 변수 total_money에서 amount를 차감합니다.
만약 total_moneyamount보다 크거나 같으면 금액을 차감하고,
그렇지 않으면 "잔액이 부족합니다."라는 메시지를 출력합니다.

print("현재 잔액: ${}".format(total_money))는 현재 잔액을 출력합니다.
이때 total_money전역 변수로 선언되어 있어서
프로그램 전체에서 접근할 수 있습니다.

add_money(1000)add_money 함수를 호출하여 1000을 추가합니다.
print("추가된 후 잔액: ${}".format(total_money))
추가된 후의 잔액을 출력합니다.

spend_money(2000)spend_money 함수를 호출하여
2000을 사용합니다.

print("사용 후 잔액: ${}".format(total_money))
사용 후의 잔액을 출력합니다.

예제코드 출력결과

이렇게 코드를 실행하면
현재 잔액, 추가된 후 잔액, 사용 후 잔액이 차례대로 출력됩니다.


자, 오늘은 파이썬의 함수에서 기본값, 키워드값, 가변인자,
그리고 지역변수와 전역변수를 다루어 보았습니다.
global 사용이 조금 미숙하긴 하지만 연습해봐야겠네요ㅎ
오늘은 여기까지로 마무리하고 다음에 또 포스팅하겠습니다:)

출처 : https://youtu.be/kWiCuklohdY
필자는 해당 링크 영상을 통해 학습하였으나,
포스팅 내용 및 설명은 영상과 다를 수 있음을 알립니다.