[Python] 혼공단_4주차_Chapter 05

Haeun Noh·2023년 2월 5일
1
post-thumbnail

0203


기본 미션 : p. 287 [직접 해보는 손코딩: 범위 내부의 정수를 모두 더하는 함수] 실행 후 코드가 입력된 화면 및 실행 결과 화면 캡처하기

선택 미션 : 매개변수, 기본 매개변수, 가변 매개변수에 대해 간략하게 정리하기



기본 미션 : p. 287 [직접 해보는 손코딩: 범위 내부의 정수를 모두 더하는 함수] 실행 후 코드가 입력된 화면 및 실행 결과 화면 캡처하기



선택 미션 : 매개변수, 기본 매개변수, 가변 매개변수에 대해 간략하게 정리하기


매개변수

: 괄호 () 안의 모든 것

def 함수 이름(매개변수, 매개변수, ...):
	문장

매개변수는 다음과 같이 함수를 생성할 때 괄호 내부에 식별자를 입력해서 만든다.


✏️ 직접 해보는 손코딩_매개변수의 기본

소스코드 param_basic.py

def print_n_times(value, n):
    for i in range(n):
        print(value)

print_n_times("안녕하세요", 5)


매개변수와 관련된 TypeError (예외 처리)

  • 매개변수를 넣어야 하는데 넣지 않은 경우
  • 넣어야 하는 매개변수의 수 보다 더 많이 넣은 경우

에 발생한다.

1. 매개변수를 넣지 않은 경우

def print_n_times(value, n): # 매개변수를 두 개 지정했는데
    for i in range(n):
        print(value)

print_n_times("안녕하세요") # 하나만 넣었음

print_n_times()라는 함수의 매개변수 n이 없다 라는 오류이다.


2. 매개변수를 더 많이 넣은 경우

def print_n_times(value, n): # 매개변수를 두 개 지정했는데
    for i in range(n):
        print(value)

print_n_times("안녕하세요", 10, 20) # 하나만 넣었음

print_n_times()라는 함수는 2개의 매개변수가 필요한데 3개가 들어왔다 라는 오류이다.



가변 매개변수

: 매개변수 개수가 변할 수 있는 매개변수로 가변 매개변수 함수에서 사용된다.

  • 가변 매개변수 함수 : 매개변수를 원하는 만큼 받을 수 있는 함수
def 함수 이름(매개변수, 매개변수, ... *가변 매개변수):
	문장

제약

가변 매개변수를 사용할 때는 다음과 같은 제약이 있다.

  • 가변 매개변수 뒤에는 일반 매개변수가 올 수 없다.
  • 가변 매개변수는 하나만 사용할 수 있다.

이러한 제약은 가변 매개변수가 어디부터 어디까지 있는지를 손쉽게 알아내기 위해서 존재한다.


✏️ 직접 해보는 손코딩_가변 매개변수 함수

소스 코드 variable_param.py

def print_n_times(n, *values):
	# n번 반복합니다
    for i in range(n):
    	# values는 리스트처럼 활용합니다.
        for value in values:
        	print(value)
        # 단순한 줄바꿈
        print()
        
# 함수 호출
print_n_times(3, "안녕하세요", "즐거운", "파이썬 프로그래밍")



기본 매개변수

: 매개변수를 입력하지 않았을 경우 매개변수에 들어가는 기본값

매개변수 =# 예시
sep = ' '
end = '\n'
file = sys.stdout
flush = False
  • 기본 매개변수 뒤에는 일반 매개변수가 올 수 없다.

✏️ 직접 해보는 손코딩_기본 매개변수

소스코드 default_param.py

def print_n_times(value, n=2):
    # n번 반복
    for i in range(n):
        print(value)

# 함수 호출
print_n_times("안녕하세요")


💡 여기서 잠깐_ 기본 매개변수 뒤에 일반 매개변수를 오지 못하게 막은 이유

만약 print_n_times(n=2, value) 형태로 사용할 수 있다면 print_n_times("안녕하세요")라고 입력했을 떄 "안녕하세요"라는 글자가 첫 번째 매개변수에 할당되어야 하는지, 두 번째 매개변수에 할당되어야 하는지 확실하게 알 수 없다. 그래서 파이썬 프로그래밍 언어는 내부적으로 기본 매개변수 뒤에 일반 매개변수가 오지 못하게 막은 것이다.



키워드 매개변수

그렇다면 가변 매개변수기본 매개변수를 같이 써도 될까?


기본 매개변수가 가변 매개변수보다 앞에 올 때

기본 매개변수가 가변 매개변수보다 앞에 오면 기본 매개변수의 의미가 사라지게 된다.

def print_n_times(n=2, *values):
	# n번 반복합니다
    for i in range(n):
    	# values는 리스트처럼 활용합니다.
        for value in values:
        	print(value)
        # 단순한 줄바꿈
        print()
        
# 함수 호출
print_n_times("안녕하세요", "즐거운", "파이썬 프로그래밍")

이렇게 실행할 경우, n에는 "안녕하세요"가 들어가게 되고 values에는 ["즐거운", "파이썬 프로그래밍"]이 들어가게 된다.

range()함수의 매개변수에는 숫자만 들어갈 수 있으므로 다음과 같은 오류가 발생한다.
따라서 기본 매개변수는 가변 매개변수 앞에 써도 의미가 없다는 것을 기억하자.


가변 매개변수가 기본 매개변수보다 앞에 올 때

def print_n_times(*values, n=2):
	# n번 반복합니다
    for i in range(n):
    	# values는 리스트처럼 활용합니다.
        for value in values:
        	print(value)
        # 단순한 줄바꿈
        print()
        
# 함수 호출
print_n_times("안녕하세요", "즐거운", "파이썬 프로그래밍", 3)

이렇게 ["안녕하세요", "즐거운", "파이썬 프로그래밍", 3]을 두 번 출력하게 된다. 가변 매개변수가 우선되는 것이다.



profile
기록의 힘을 믿는 개발자, 노하은입니다!

0개의 댓글