본문 바로가기
Python

[Python 기초] 파이썬 함수(Funtion) - 사용자 정의 함수 - 2

by dev수니 2021. 4. 2.
반응형

 

 

 

매개변수(parameter)

사용자 정의 함수의 매개변수(parameter)는 다양한 종류로 설정해줄 수 있다.

다음 매개변수의 형태의 종류에 대해 알아보자.

 

 

 


 

 

 

 1  일반 매개변수 

 

가장 많이 사용되는 일반적인 매개변수이다.

함수 선언시 정의된 매개변수와 함수 호출시의 인자값의 갯수는 일치해야 한다.

1
2
3
def animal(a,b):
    print(a,b)
animal("lion","rabbit")
cs

 

 

 

 

 

 

 2  가변 매개변수 

 

함수를 선언할 때 매개변수 앞에(*)를 붙여준다. 이는 매개변수의 수를 여러개 입력받겠다는 의미이다.

가변 매개변수는 입력받은 인수를 튜플(tuple)형태로 저장한다.

 

def 함수명(*매개변수):
     실행할 문장1
     실행할 문장2
     ...

 

 

다음 예제를 살펴보자.

1
2
3
4
5
def nameShow(*a):
     print(a)
nameShow("멍청이")
nameShow("멍청이","바보")
nameShow("다다",20,"010-1234-1234")
cs
('멍청이',)
('멍청이', '바보')
('다다', 20, '010-1234-1234')
>>> 

 

 

 

 

 

 

 

 

 3  기본(defalt) 매개변수 

 

함수를 호출할 때 인수를 넣어주지 않아도 기본값이 할당되도록 하는 매개변수

매개변수 자리를 미리 초기화해준다. 

1
2
def nameShow(a,b="무명씨"):
     print(a,b)
cs
>>> nameShow("나나")
나나
무명씨
>>> 

 

매개변수 값을 초기화 놓으면 매개변수가 들어오지 않았을 때 초기화한 값으로 함수를 실행한다.

 

 

# 한명의 정보(이름,나이,성별)를 받아서 출력

1
2
3
4
5
6
7
8
9
def say_myself(name, age, man=True):
     print("나의 이름은:",name)
     print("나의 나이는:",age)
     if man:
          print("남자")
     else:
          print("여자")
say_muself("라라",10,False)
say_muself("설란",12)
cs
나의 이름은: 라라
나의 나이는: 10
여자
나의 이름은: 설란
나의 나이는: 12
남자

 

 

만약 다음과 같이 name에 초기값을 설정할 경우

1
2
3
4
5
6
7
8
9
def say_myself(name="없음", age, man=True):
     print("나의 이름은:",name)
     print("나의 나이는:",age)
     if man:
          print("남자")
     else:
          print("여자")
say_muself("라라",10,False)
say_muself("설란",12)
cs

에러발생! 모든 매개변수에 초기값을 설정해주던지, name을 뒤에 써준다.
초기값 설정은 반드시 뒤에서부터 설정해줘야 한다.

 

 

 

 

 4  매개변수의 혼용

 

 

1. 가변 매개변수(*) 의 혼용

 

# 매개변수를 두개 설정해주고 두번째 매개변수를 가변 매개변수로 설정해준 경우

1
2
3
4
5
def funt3(a1,*a2):
     print(a1)
     for i in a2
          print(i,"수")
funt3("add",1,2,3,4,5)
cs
add    # a1
1 수   #
2 수   # a2
3 수   # ...
4 수
5 수

줄 5에서 첫번째로 입력해준 "add"가 매개변수 a1의 인수가 되고 1,2,3,4,5는 a2의 인수이다.

 

 

# 그리고 위 코드에서 첫번째 매개변수에 초기값을 설정해주고 인수 "add"를 지운 후 함수를 호출해주었다.

1
2
3
4
5
def funt3(a1="무",*a2):
     print(a1)
     for i in a2
          print(i,"수")
funt3(1,2,3,4,5)
cs
1
2 수
3 수
4 수
5 수

"무"는 출력되지 않았다. 왜일까???

 

"add"를 지워줬다고 해서 a1매개변수의 인수가 사라진것은 아니다. "add"를 지워줌으로써 a1의 인수는 "add"가 아닌 1이 되는 것이다.

 

따라서 a1의 인수는 1이라 초기값 "무"는 출력되지 않고 a2의 인수는 2,3,4,5가 되는 것이다.

 

 

 

 

# 가변 매개변수를 앞에 설정해줬을 경우

1
2
3
4
5
def funt3(*a2,a3):
     for i in a2
          print(i,"수")
     print(a(3))
funt3(1,2,3,4,5)
cs

위와 같은 경우 가변매개변수는 인자값을 여러개 갖기때문에 끝 값이 어디인지 구별하지 못한다. 따라서 에러가 발생한다.

 

 

 

# 가변 매개변수를 두개 사용한 경우

1
2
3
4
5
def funt3(*a2,*a3):
     for i in a2
          print(i,"수")
     print(a(3))
funt3(1,2,3,4,5)
cs

위와 같이 가변 매개변수를 두개 사용한 경우에도 에러가 발생한다.

 

 

위 내용을 토대로 가변 매개변수는 무조건 맨뒤, 초기값 설정은 그다음 뒤에 작성해주고, 가변 매개변수를 두개이상 사용하면 안된다.!

 

 

 

 

반응형

댓글