(TIL2) Parameters & Arguments

SooHyung Kim·2020년 3월 24일
0

Today I learned

목록 보기
2/25

Function

일정한 작업을 수행하는 코드 블럭으로, 반복되는 코드를 함수로 정의하여 사용하여 가독성을 UP!

Python에서의 함수 기본 문법

def 함수명(parameter):
    문장1
    문장2
    ...
    문장N
    [return 리턴값]
  • parameter와 return은 선택적으로 삽입 가능!
  • return은 해당 함수를 호출한 주체에게 결과값을 보내주는 것!

Function Parameters

  • Positional Arguments : 호출 값이 순서대로 함수 내 parameter로 전해지는 방식

    def add(a, b):
    	print(a + b)
    
    add(2, 3)
  • Keyword Arguments : Parameter의 이름으로 맞춰 값을 전해주는 방식으로 실제 Parameter의 순서가 바뀌어도 무방함
    - parameter의 이름을 통해 값을 전달하기 때문에 실수로 값이 바뀔 확률이 적어지고 가독성의 상승도 도모할 수 있음

  def mul(a, b, c):
      print(a * b * c)

  mul(a = 2, b = 2, c = 3)  == mul(c =3, a = 2, b = 2)
  • Mixing positional arguments and keyword arguments : 기본방식과 Keyword Arguments 방식의 혼용
    - Keyword Arguments의 순서는 상관없지만 Positional Argument의 자리가 지켜지지 않을 경우에는 Error가 발생하므로 Positional Argument의 자리는 꼭 지켜야 하며 Keyword Argument는 Position Argument 뒤에 삽입할 것

      def mult(a, b, c):
          print(a * b * c)
    
      mul(b=3, 2, c = 2)
      SyntaxError: positional argument follows keyword argument
 
 
  - Parameter Default Value : Parameter에 디폴트 값을 정의해 줄 수 있으며, 함수 호출 시 굳이 값을 넘기지 않아도 되며 항상 맨 뒤에서 정의해야 함
  
  ```python
    def sum(a, b = 2):
        return a+b

    sum(3)
  • 파이썬 인터프리터에서는 사용자가 혼합적으로 디폴트 값을 지정했을 경우 주어진 argument가 어떤 parameter와 일치하는 지 결정할 수 있는 능력이 없기 때문에 parameter가 올바른 순서대로 주어지지 않으면 SyntaxError가 발생하게 됨

      def sum(a=2, b):
         return a+b
    
     sum(3)
    
     SyntaxError: non-default argument follows default argument

    본 예시와 같이 파이썬 인터프리터에서는 호출된 sum(3)이 함수 내에서

    1. a = 2, b = 3을 대입하라는 것인가?
    2. a = 3을 대입하라는 것인가? 를
      판단 할 수 있는 능력이 없기 때문에 디폴트 값이 없는 parameter를 먼저 정의해야 함
  • 따라서 함수 내에서 Parameter를 정의 하기 위해서는 다음의 순서를 꼭 인식하고 있어야 함

     def keyword(key, keyword='abc', *word, keyword_only, keyword_only2 = 8, **kwargs):
     	print(key, keyword, word, keyword_only, keyword_only2, kwargs)
     
     keyword(1, 1, 2, 3, keyword_only=7, a=3, b=5)
     
     >>> 1 1 (2, 3) 7 8 {'a': 3, 'b': 5}
     
    
  • 앞서 Default Argument는 Positional Argument보다 앞서 위치 할 수 없다고 정의했다. 위 그림에서는 Keyword-only Argument라는 개념이 등장하는데, 파이썬에서는 *, 를 통해 keyword-only를 명시 할 수 있도록 제안하고 있음

profile
Slow and steady win the race

0개의 댓글