오숭이 2022. 1. 3. 16:55

여러 개의 입력값을 받는 함수 만들기

 

- *args

 def add_many(*args): 
     result = 0 
     for i in args: 
         result = result + i 
     return result

*args처럼 매개변수 이름 앞에 *을 붙이면 입력값을 전부 모아서 튜플로 만들어 준다. 또한, 입력값이 몇 개든 상관없다.

*args는 임의로 정한 변수이며, *pey, *python처럼 아무 이름이나 써도 된다.

 

※ args는 매개변수를 뜻하는 영어 단어 arguments의 약자이며 관례적으로 자주 사용한다.

 

위 코드 실행시 결과는 아래와 같다.

result = add_many(1,2,3)
print(result)

6

result = add_many(1,2,3,4,5,6,7,8,9,10)
print(result)

55

 

*를 사용한 매개변수는 단독이 아닌 다른 매개변수가 같이 사용되기도 한다.

def add_mul(choice, *args): 
     if choice == "add": 
         result = 0 
         for i in args: 
             result = result + i 
     elif choice == "mul": 
         result = 1 
         for i in args: 
             result = result * i 
     return result

 

- **kwargs (키워드 파라미터)

키워드 파라미터를 사용할 때는 매개변수 앞에 별 두개(**)를 붙인다.

 def print_kwargs(**kwargs):
     print(kwargs)

 

즉 **kwargs처럼 매개변수 이름 앞에 **을 붙이면 매개변수 kwargs는 딕셔너리가 되고 모든 key=value 형태의 결괏값이 그 딕셔너리에 저장된다.

>>> print_kwargs(a=1)
{'a': 1}
>>> print_kwargs(name='foo', age=3)
{'age': 3, 'name': 'foo'}

 

 

함수의 결괏값은 언제나 하나이다.

>>> def add_and_mul(a,b): 
     return a+b, a*b

 

위 함수의 결과값은 2개가 아니라 1개이다. 결과값은 튜플값 하나인 (a+b, a*b)가 된다.

 

 

return의 또 다른 쓰임새

특별한 상황일 때 함수를 빠져나가고 싶다면 return을 단독으로 써서 함수를 즉시 빠져나갈 수 있다

>>> def say_nick(nick): 
...     if nick == "바보": 
...         return 
...     print("나의 별명은 %s 입니다." % nick)
... 
>>>
>>> say_nick('야호')
나의 별명은 야호입니다.
>>> say_nick('바보')
>>>

 

 

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

 

- 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)

위 코드에서 함수안의 global a 문장은 함수 안에서 함수 밖의 a 변수를 직접 사용하겠다는 뜻이다.

 

 

lambda

lambda는 함수를 생성할 때 사용하는 예약어로 def와 동일한 역할을 한다.

 

lambda 매개변수1, 매개변수2, ... : 매개변수를 이용한 표현식과 같이 사용한다.

>>> add = lambda a, b: a+b
>>> result = add(3, 4)
>>> print(result)
7

 

※ lambda 예약어로 만든 함수는 return 명령어가 없어도 결괏값을 돌려준다.