Programming

; develop a program

Back-End/Python

[Python] 함수의 매개변수(Parameter)

Clloud_ 2022. 9. 25. 13:34
반응형

매개변수(Parameter)

매개변수는 선언부에 선언하는 변수로 호출할 때 전달된 인수를 저장하는 변수를 말한다.

0 ~ N 개 선언이 가능하고, 2개 이상 선언 시 ' , '를 구분자를 사용한다.

 

매개변수는 로컬 변수로 함수 내에서만 사용할 수 있다.

로컬 변수는 함수 안에 선언된 변수로 함수 안에서만 사용할 수 있고 외부에서 사용할 수 없다.

 


기본값이 있는 매개변수(Parameter)

매개변수 선언 시 값을 대입하면 그 값은 기본값이 되고, 호출 시 인수(argument)가 전달되지 않으면 대입해놓은 기본값을 사용한다.

기본값을 선언한 매개변수 뒤에 기본값이 없는 매개변수는 선언할 수 없다.

 

 

예제

순서 1. parameter의 기본값이 있는 함수를 정의한다. (address: 기본값이 있는 매개변수)

순서 2. if else 문을 사용하여 조건문을 생성한다. 조건은 address != None

순서 3. 조건이 True인 block 내 명령문을 실행한다.

def greeting5(name, age, address=None):
    greeting = None
    if not address:  # address != None
        greeting = f"{age}세의 {name}님 환영합니다."
    else:  # address == None
        greeting = f"{age}세의 {address}사는 {name}님 환영합니다."
    return greeting

 

정의한 함수를 호출한다.

더보기

name, age: 기본값이 없는 매개변수 => required parameter (필수 입력)

address: 기본값이 있는 매개변수 => optional parameter (선택 입력)

greeting5("손흥민", 30)
greeting5("이강인", 21, "한국")

 

[실행결과]

'30세의 손흥민님 환영합니다.'
'21세의 한국사는 이강인님 환영합니다.'

 


키워드 인수(Keyword Argument)

키워드 인수는 함수 호출할 때 인수(argument)를 '변수명=전달할 값' 형식으로 선언해서 어떤 값을 전달할 것인지 정의한다.

키워드 인수를 사용하면 순서와 상관없이 호출할 수 있다.

 

 

예제

순서 1. 키워드 인수를 사용하여 순서대로 호출한다.

순서 2. 키워드 인수를 사용하여 순서에 상관없이 호출한다.

순서 3. 키워드 인수와 위치 인자 (positional argument) 둘 다 사용하여 호출한다..

위치 인자 (positional argument)는 키워드 인자가 아닌 인자를 말한다.
함수를 호출할 떄 전달되는 값이 매개변수에 순서대로 전달되는 인수를 의미한다
greeting5(name='손흥민', age=30, address='토트넘')
greeting5(age=30, address='토트넘', name='손흥민')
greeting5('손흥민', address='토트넘', age=30)

 

[실행결과]

'30세의 토트넘사는 손흥민님 환영합니다.'
'30세의 토트넘사는 손흥민님 환영합니다.'
'30세의 토트넘사는 손흥민님 환영합니다.'

 


가변 인자(*변수명/**변수명)

가변 인자는 인수의 개수를 정하지 않고 받을 경우 사용한다.

하나의 함수에 * 변수명, ** 변수명 각각 한 개씩만 선언할 수 있고 마지막 변수로 선언되어야 한다.

 

매개변수 앞에 * 를 붙이는 경우 전달된 값들은 tuple로 받아서 처리한다.

매개변수 앞에 ** 를 붙이는 경우 전달된 값들은 dictionary로 받아서 처리하고, 키=값 형식으로 인수를 전달해야 한다.

 

 

예제 1

순서 1. 매개변수가 *변수명인 함수를 정의한다.

순서 2. 문을 사용하여 반복문을 생성한다.

순서 3. return 값을 반환한다.

def sum_func(*itr):
    ret = 0
    for i in itr:
        ret += i
    return ret

 

정의한 함수를 호출한다.

print(sum_func(1, 2))
print(sum_func(1, 2, 3, 4, 5, 6, 7, 8))
print(sum_func(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 21, 54, 68, 34, 820))
print(sum_func())

 

[실행결과]

3
36
1052
0

 


예제 2

순서 1. 매개변수가 **변수명인 함수를 정의한다.

순서 2. 매개변수의 타입과 대입한 값을 출력한다.

def print_info(**info):
    print(type(info), '\n', info)

 

정의한 함수를 호출한다.

print_info(name='홍길동',
           age=20,
           address='서울',
           weight=67.8,
           tall=182.3,
           blood_type='B')

 

[실행결과]

<class 'dict'> 
{'name': '홍길동', 'age': 20, 'address': '서울', 'weight': 67.8, 'tall': 182.3, 'blood_type': 'B'}

 


예제 3

*변수명과 **변수명을 각각 하나씩 선언할 경우 (*변수명을 먼저 선언)

 

순서 1. 매개변수가 *변수명과 **변수명인 함수를 정의한다.

순서 2. 매개변수의 타입과 대입한 값을 출력한다.

def exam(*args, **kwargs):
    print(type(args), args)
    print(type(kwargs), kwargs)

 

정의한 함수를 호출한다.

exam3(1, 2, 3, 4, a=1, b=2, c=3)

 

[실행결과]

<class 'tuple'> (1, 2, 3, 4)
<class 'dict'> {'a': 1, 'b': 2, 'c': 3}

 


예제 4

일반 매개변수와 가변 인자를 같이 선언할 경우 (일반 매개변수를 먼저 선언)

 

순서 1. 매개변수가 일반 매개변수, *변수명, **변수명인 함수를 정의한다.

순서 2. 매개변수에 대입한 값을 출력한다.

def exam4(v1, v2, v3, *args, **kwargs):
    print(v1, v2, v3)
    print(args)
    print(kwargs)

 

정의한 함수를 호출한다.

exam4(10, 20, 30)
print("-----------------------")
exam4(10, 20, 30, 100, 200, 300)
print("-----------------------")
exam4('a', 'b', 'c', 1, 2, 3, 4, 5, 6, 7, a=100, b=200, c=300)

 

[실행결과]

10 20 30
()
{}
-----------------------
10 20 30
(100, 200, 300)
{}
-----------------------
a b c
(1, 2, 3, 4, 5, 6, 7)
{'a': 100, 'b': 200, 'c': 300}

 

최소한 3개의 위치 변수(positional argument)는 전달해야 한다.

 


return value

return value는 함수로부터 전달되는 값을 결과(result) 또는 반환 값(return value)라고 한다.

 

함수 구현부에 return [값] 구문을 사용할 경우 'return'만 선언되면 함수를 정상적으로 끝내고 호출한 곳으로 돌아가지만, 'return 값'이 선언되면 호출한 곳으로 값을 가지고 돌아간다.

 

값을 생략했을 경우 return None 즉 None을 반환한고, return 구문을 생략한 경우 return None이 default 실행된다.

여러 개의 값을 return 하는 경우 자료구조로 묶어서 전달해야 하고, 함수는 한 개의 값만 반환할 수 있다.

 

예제 

순서 1. 매개변수가 있는 함수를 정의한다.

순서 2. if 문을 사용하여 조건문을 생성한다. 조건은 n2 == 0

순서 3. 'n1 / n2'을 반환(return)한다.

def divide(n1, n2):
    if not n2:
        print("n2는 0 이외에 숫자를 넣어주세요.")
    return n1 / n2

 

정의한 함수를 호출한다.

v = divide(10, 5)
print(v)

s = divide(10, 0)
print(s)

 

[실행결과]

2.0

n2는 0 이외에 숫자를 넣어주세요.
None

 


 

반응형