본문 바로가기
Python/파이썬 기초

함수의 입력매개변수(*args, **kwarg)와 람다표현식 - 파이썬 기초(20)

by 콩돌 2018. 12. 27.
반응형

참고 자료

https://docs.python.org/ko/3/tutorial/controlflow.html

https://docs.python.org/ko/3/reference/expressions.html



파이썬 버전 3.7 기준



파이썬에서의 함수 생성 및 출력


본 포스팅에서 다루는 내용은 다음과 같다.

키워드 인자(*args 및 **kwarg 포함), 람다(lambda)표현식 등.

앞선 포스팅에서 키워드인자에 대한 설명을 간략히 적어놓았으나 본 포스팅에서 자세히 설명하고자 한다.


키워드 인자 및 입력 순서

  ○ 함수에 입력변수를 넣는 방법으로는 크게 4가지가 존재한다.

    ▷ 변수명만 입력하는 경우(위치 인자라고도 표현한다.)

    ▷ *args 형태로 입력하는 경우

    ▷ 키워드 인자로 입력하는 경우

    ▷ **kwarg 형태로 입력하는 경우 

  ○ 위에 설명된 매개변수의 입력 순서는 위에서 나열한 순서와 같다.


함수 정의시 매개변수 입력의 예)

# 변수명만 입력하는 경우

def 함수이름(입력변수명): 


# 키워드 인자를 이용하는 경우

def 함수이름(키워드인자1=기본값1, 키워드인자2=기본값2, 키워드인자3=기본값3, ...): 


# *변수와 **변수를 이용하는 경우

def 함수이름(*args, **kwarg): 


# 각 변수의 입력 순서

def 함수이름(입력변수명1, 입력변수명2, ... , *args,  키워드인자1=기본값1, 키워드인자2=기본값2, ...,  **kwarg): 


  ○ 위치인자는 함수 사용할때 위치 혹은 순서를 정확히 입력받아야 한다.


  ○ *args 형태는 변수의 수가 정해지지 않은 경우 사용될 수 있다.

    ▷ 함수에서 입력 변수를 콤마로 나누어 계속해서 입력하는 형태로 사용된다.

    ▷ 내장함수에서 min() 및 max() 사용법을 생각하면 이해하기 쉽다.


  ○ 키워드인자를 이용하여 함수(def)를 작성하기 위해 입력 매개변수를 "입력변수=기본값" 형태로 정의한다. 

    ▷ 키워드입력의 순서는 상관 없으나, 입력변수 이름을 정확히 입력해야 한다.

    ▷ 입력변수를 입력하지 않을 경우에는 위치인자와 동일하며, 순서를 정확히 입력해야한다.


  ○ **kwarg 형태는 위의 *변수 형태와 마찬가지로 변수의 수가 정해지지 않은 경우 사용될 수 있으나, 딕셔너리형태로 입력된다는 것이 다르다.

    ▷ 함수를 사용할 때 키워드 인자와 비슷하게 "변수명=변수값" 형태로 짝지어서 입력을 하게된다.
    ▷ 키워드 인자와는 다르게 함수 안에 없는 새로운 키와 값을 입력받을 수 있다.
    ▷ "변수명=변수값"에서 변수명은 딕셔너리 키에 해당되며 변수값은 딕셔너리 값에 해당된다.

  ○ 위의 변수들 사용 예가 다음과 같이 있다. 

입력 매개변수의 예제)
In[3]: def keyword_ex(poarg1, poarg2, *args, keyword1="default 1", keyword2="default 2", **kwargs):
    ...:     print("positional argument 1: ", str(poarg1))
    ...:     print("positional argument 2: ", str(poarg2))
    ...:     print("keyword1 argument: ", str(keyword1))
    ...:     print("keyword2 argument: ", str(keyword2))
    ...:     for num, name in enumerate(args):
    ...:         print("* argument ", str(num),":", str(name))
    ...:     for key in kwargs:
    ...:         print("** argument ", str(key), ":", str(kwargs[key]))
    ...: 
In[4]: keyword_ex('po arg1','po arg2', "* 1", '* 2', '* 3', '* 4', keyword1='keyword 1', keyword2='keyword 2', kwarg1=1, kwarg2=2, kwarg3=3)
positional argument 1:  po arg1
positional argument 2:  po arg2
keyword1 argument:  keyword 1
keyword2 argument:  keyword 2
* argument  0 : * 1
* argument  1 : * 2
* argument  2 : * 3
* argument  3 : * 4
** argument  kwarg1 : 1
** argument  kwarg2 : 2
** argument  kwarg3 : 3


람다 표현식 lambda

  ○ lambda 키워들 이용하면 매우 간단한 함수를 작성하는 것이 가능하다. 

  ○ 문법적으로 하나의 표현식으로 제한된다.

  ○ sorted 함수 혹은 sort 메서드에서 정렬을 수행될 때에도 사용하기도 한다. (이곳을 참고)


람다 표현식의 구성)

# 람다표현식의 구성

lambda [parameter list] : expression


# 람다표현식과 동등한 함수

def function(parameter list):

    return expression


단순한 사용 예제)
In[31]: x= lambda x: x+1
In[32]: print(x)
<function <lambda> at 0x04B8CC90>
In[33]: x(1)
Out[33]: 2
In[34]: x(3)
Out[34]: 4


sorted 함수를 이용한 정렬시 사용 예)

In[33]sorted([4,53,6,75,32])

Out[33]: [4, 6, 32, 53, 75]


In[34]: a=[('snow', 3), ('winter', 1), ('large', 2) ] 

In[35]: sorted(a, key= lambda go: go[1])

Out[35]: [('winter', 1), ('large', 2), ('snow', 3)]



반응형

댓글